`
iaiai
  • 浏览: 2203275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

flutter shared_preferences 异步变同步

 
阅读更多
前言
引用

在开发原生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,
    );
  }
}
分享到:
评论

相关推荐

    weather-cross-platform:一个简单的跨平台天气应用,展示了各种Flutter编程技术

    天气跨平台这是一个使用Flutter框架用Dart编写的简单跨平台天气应用程序,适用于Android和iOS平台。...serializable 地理定位器shared_preferences要求Flutter 2.0.1或更高Dart 2.12.0或更高版本设置从获取您的A

    flutter_lucklyshop-master.zip

    - **本地存储**:Flutter支持sqflite数据库进行本地数据存储,或使用shared_preferences实现简单的键值对存储。 - **热重载**:Flutter的热重载功能极大地提高了开发效率,允许开发者快速预览代码变更。 - **集成...

    flutter_data_persistence:一个项目,展示如何使用“共享首选项”包持久保存数据

    在本文中,我们将深入探讨如何在Flutter应用中使用“共享首选项”(Shared Preferences)包进行数据持久化。Flutter是一个由Google开发的开源移动应用程序SDK,用于构建高性能、高保真、多平台的用户界面。在开发...

    exemple_flutter_

    10. **插件和第三方库**: Flutter的生态系统包括大量社区维护的插件和库,例如http包用于网络请求,path_provider用于访问设备文件系统,shared_preferences用于本地数据存储等。示例代码可能引入并使用了这些插件以...

    flutter_meituan_shop

    4. **数据持久化**:为了保存用户数据或应用状态,项目可能使用了shared_preferences或sqflite库进行本地数据存储。 5. **图片加载与缓存**:在显示店铺图片时,可能会用到image_picker库选取图片,而网络图片加载...

    Flutter_project_second

    6. **本地存储**:学习Shared_preferences、sqflite或sembast等库,用于保存应用数据。 7. **动画**:理解AnimationController和Tween类,创建平滑的过渡效果和自定义动画。 8. **插件**:使用如flutter_svg、image_...

    flutter_todo_codelab

    这可能涉及到使用`shared_preferences`库进行简单数据存储,或者更复杂的数据库解决方案,如`sqflite`。 6. **用户交互**:Flutter提供了一系列的事件处理机制,如`onTap`,允许开发者响应用户操作,如添加、删除和...

    flutter_code_manager:一个代码管理器

    通过`flutter_code_manager`,你可以学习如何导入和使用这些资源,如`http`包用于网络请求,`shared_preferences`用于本地数据存储等。 9. **测试** `flutter_test`库提供了丰富的测试工具,包括单元测试和集成...

    flutter_march_batch

    9. **本地存储**:了解如何使用 shared_preferences、sqflite 或 Hive 进行数据持久化。 10. **平台交互**:学习如何使用 platform channels 实现 Flutter 和原生代码的交互,如调用 Android 或 iOS 的原生功能。 ...

    flutter_json_list

    可以使用`http`库进行HTTP请求,或者使用`shared_preferences`库进行本地存储操作。例如,使用`http.get()`获取JSON数据: ```dart Future&lt;void&gt; fetchData() async { final response = await http.get('...

    flutter_news_app:搜索新闻应用

    6. **数据缓存**:为了提高用户体验,可以缓存新闻数据,使用如 Hive 或 Shared_preferences 进行本地存储。 7. **API集成**:理解和使用新闻 API,如 NewsAPI 或自建的 RESTful API,需要了解 API 规范和错误处理...

    auth-flutter:Flutter的身份验证和授权

    2. 存储令牌:Flutter应用将JWT存储在本地(如Shared Preferences)。 3. 请求验证:每次发送API请求时,将JWT作为Authorization头发送给服务器。 4. 检查过期:服务器验证JWT并检查是否过期,过期则返回刷新令牌或...

    FlutterOffline一个整洁的工具类用来处理离线在线连接

    在实际项目中,Flutter Offline可以配合其他库一起使用,如`http`库进行网络请求,或者`shared_preferences`库存储用户数据,以便在网络不稳定时缓存信息。结合这些工具,开发者可以构建出即使在离线状态下也能提供...

    基于Flutter的高颜值第三方网易云音乐播放器源码.zip

    6. **本地存储**:使用shared_preferences或sqflite库保存用户的偏好设置和离线音乐,实现离线模式和个性化体验。 7. **动画**:Flutter的Animation库提供了丰富的动画效果,如Tween动画、AnimatedBuilder、 ...

    flutter_shop_app:Flutter实战学习开发应用

    7. **本地存储**:学习使用shared_preferences、sqflite等库进行本地数据存储,实现应用的数据持久化。 8. **导航与路由**:掌握Navigator和Route的概念,学习如何在页面间进行导航,以及如何传递参数。 9. **动画...

    Flutter_Demo:Flutter基础

    Dart的异步编程模型,如`Future`和`async/await`,使得处理异步任务变得简单直观。 Flutter的基础构建块是Widgets。Widgets是Flutter UI的基石,它们定义了应用的视觉和交互元素。Flutter中的所有可见元素都是...

    my_flutter_demos

    8. **本地存储**:学习如何使用 shared_preferences、sqflite 等库进行数据持久化。 9. **平台交互**:理解如何使用 Platform Channel 实现 Flutter 与原生代码的交互,例如调用 Android 或 iOS 的特定功能。 10. ...

    Flutter_Projects:包含在Flutter上制作的各种迷你项目

    另一个项目可能涉及使用`shared_preferences`插件来实现本地数据存储,或者使用`provider`或`riverpod`这样的状态管理库来简化应用程序状态的管理。 动画在Flutter中是一个强大而直观的领域,使用`AnimatedBuilder`...

    flutter_firs_task:柜台应用

    如果需要在应用关闭后保留某些数据,可以使用`sqflite`库进行本地SQLite数据库操作,或者使用`shared_preferences`库存储简单键值对。 9. **响应式设计**: Flutter的布局系统支持自适应屏幕尺寸,确保柜台应用在...

    一个Flutter写的一个无聊的App今日份的X

    6. **本地存储**:如果需要持久化数据,可能使用sqflite数据库或shared_preferences库来存储用户数据或应用设置。 7. **异步编程**:Dart语言支持async/await语法,使得异步操作更加简洁易读,开发者会广泛使用它来...

Global site tag (gtag.js) - Google Analytics