美文网首页FlutterFlutter
Flutter 初始化存储异步变同步

Flutter 初始化存储异步变同步

作者: 独孤流 | 来源:发表于2019-05-28 13:42 被阅读70次

    前言

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

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

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

    2、使用一个工具类持有一个静态的shared_preferencespackage_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,
        );
      }
    }
    

    相关文章

      网友评论

        本文标题:Flutter 初始化存储异步变同步

        本文链接:https://www.haomeiwen.com/subject/cpirtctx.html