前言
引用
在开发原生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,
);
}
}
分享到:
相关推荐
天气跨平台这是一个使用Flutter框架用Dart编写的简单跨平台天气应用程序,适用于Android和iOS平台。...serializable 地理定位器shared_preferences要求Flutter 2.0.1或更高Dart 2.12.0或更高版本设置从获取您的A
- **本地存储**:Flutter支持sqflite数据库进行本地数据存储,或使用shared_preferences实现简单的键值对存储。 - **热重载**:Flutter的热重载功能极大地提高了开发效率,允许开发者快速预览代码变更。 - **集成...
在本文中,我们将深入探讨如何在Flutter应用中使用“共享首选项”(Shared Preferences)包进行数据持久化。Flutter是一个由Google开发的开源移动应用程序SDK,用于构建高性能、高保真、多平台的用户界面。在开发...
10. **插件和第三方库**: Flutter的生态系统包括大量社区维护的插件和库,例如http包用于网络请求,path_provider用于访问设备文件系统,shared_preferences用于本地数据存储等。示例代码可能引入并使用了这些插件以...
4. **数据持久化**:为了保存用户数据或应用状态,项目可能使用了shared_preferences或sqflite库进行本地数据存储。 5. **图片加载与缓存**:在显示店铺图片时,可能会用到image_picker库选取图片,而网络图片加载...
6. **本地存储**:学习Shared_preferences、sqflite或sembast等库,用于保存应用数据。 7. **动画**:理解AnimationController和Tween类,创建平滑的过渡效果和自定义动画。 8. **插件**:使用如flutter_svg、image_...
这可能涉及到使用`shared_preferences`库进行简单数据存储,或者更复杂的数据库解决方案,如`sqflite`。 6. **用户交互**:Flutter提供了一系列的事件处理机制,如`onTap`,允许开发者响应用户操作,如添加、删除和...
通过`flutter_code_manager`,你可以学习如何导入和使用这些资源,如`http`包用于网络请求,`shared_preferences`用于本地数据存储等。 9. **测试** `flutter_test`库提供了丰富的测试工具,包括单元测试和集成...
9. **本地存储**:了解如何使用 shared_preferences、sqflite 或 Hive 进行数据持久化。 10. **平台交互**:学习如何使用 platform channels 实现 Flutter 和原生代码的交互,如调用 Android 或 iOS 的原生功能。 ...
可以使用`http`库进行HTTP请求,或者使用`shared_preferences`库进行本地存储操作。例如,使用`http.get()`获取JSON数据: ```dart Future<void> fetchData() async { final response = await http.get('...
6. **数据缓存**:为了提高用户体验,可以缓存新闻数据,使用如 Hive 或 Shared_preferences 进行本地存储。 7. **API集成**:理解和使用新闻 API,如 NewsAPI 或自建的 RESTful API,需要了解 API 规范和错误处理...
2. 存储令牌:Flutter应用将JWT存储在本地(如Shared Preferences)。 3. 请求验证:每次发送API请求时,将JWT作为Authorization头发送给服务器。 4. 检查过期:服务器验证JWT并检查是否过期,过期则返回刷新令牌或...
在实际项目中,Flutter Offline可以配合其他库一起使用,如`http`库进行网络请求,或者`shared_preferences`库存储用户数据,以便在网络不稳定时缓存信息。结合这些工具,开发者可以构建出即使在离线状态下也能提供...
6. **本地存储**:使用shared_preferences或sqflite库保存用户的偏好设置和离线音乐,实现离线模式和个性化体验。 7. **动画**:Flutter的Animation库提供了丰富的动画效果,如Tween动画、AnimatedBuilder、 ...
7. **本地存储**:学习使用shared_preferences、sqflite等库进行本地数据存储,实现应用的数据持久化。 8. **导航与路由**:掌握Navigator和Route的概念,学习如何在页面间进行导航,以及如何传递参数。 9. **动画...
Dart的异步编程模型,如`Future`和`async/await`,使得处理异步任务变得简单直观。 Flutter的基础构建块是Widgets。Widgets是Flutter UI的基石,它们定义了应用的视觉和交互元素。Flutter中的所有可见元素都是...
8. **本地存储**:学习如何使用 shared_preferences、sqflite 等库进行数据持久化。 9. **平台交互**:理解如何使用 Platform Channel 实现 Flutter 与原生代码的交互,例如调用 Android 或 iOS 的特定功能。 10. ...
另一个项目可能涉及使用`shared_preferences`插件来实现本地数据存储,或者使用`provider`或`riverpod`这样的状态管理库来简化应用程序状态的管理。 动画在Flutter中是一个强大而直观的领域,使用`AnimatedBuilder`...
如果需要在应用关闭后保留某些数据,可以使用`sqflite`库进行本地SQLite数据库操作,或者使用`shared_preferences`库存储简单键值对。 9. **响应式设计**: Flutter的布局系统支持自适应屏幕尺寸,确保柜台应用在...
6. **本地存储**:如果需要持久化数据,可能使用sqflite数据库或shared_preferences库来存储用户数据或应用设置。 7. **异步编程**:Dart语言支持async/await语法,使得异步操作更加简洁易读,开发者会广泛使用它来...