flutter shared_preferences 异步变同步
  SSVqwpswHvNR 2023年11月02日 59 0


前言

在开发原生iOS或Native应用时,一般有判断上一次安装的版本和当前版本是否是同一个版本,如果不是同一个版本,则要显示引导页,这个过程是把版本号持久化存储起来,在每一次启动时进行判断,这个过程必须是同步的,但flutter > 提供的shared_preferences和package_info却都是异步的

解决方案:
1、在pubspec.yaml里配置依赖packages

# 依赖库
dependencies:
flutter:
sdk: flutter
#数据存储
shared_preferences: ^0.5.2+1
#获取版本号等信息
package_info: ^0.4.0+3

2、使用一个工具类持有一个静态的shared_preferences和package_info

import 'package:shared_preferences/shared_preferences.dart';
import 'package:package_info/package_info.dart';
class SpUtil{
static SharedPreferences preferences;
static PackageInfo packageInfo;
static Future<bool> getInstance() async{
preferences = await SharedPreferences.getInstance();
packageInfo = await PackageInfo.fromPlatform();
return true;
}
}

3、在main方法里先调用初始化方法,再调用runApp方法

void main() {
realRunApp();
}
void realRunApp() async {
bool success = await SpUtil.getInstance();
print("init-"+success.toString());
runApp(MyApp());
}

4、在需要使用时就可以同步调用了

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {

Widget rootPage;
String version = SpUtil.packageInfo.version;
String oldVersion = SpUtil.preferences.getString('oldVersion');
if(version == oldVersion){
// 如果已经显示过了则直接显示tab
rootPage = TabBarPage();
}else{
// 没有显示过guide,则优先显示guide
rootPage = CircleGuidePage();
}
return MaterialApp(
title: 'MyApp',
debugShowCheckedModeBanner: true,
home: rootPage,
);
}
}


【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月08日 0

暂无评论

推荐阅读
  b1UHV4WKBb2S   2023年11月13日   37   0   0 裁剪ideflutter
  b1UHV4WKBb2S   2023年11月13日   29   0   0 flutterDart
SSVqwpswHvNR