当前位置:网站首页>flutter shared_preferences 异步变同步
flutter shared_preferences 异步变同步
2022-08-09 00:04:00 【{丸の子}】
前言
在开发原生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,
);
}
}
边栏推荐
猜你喜欢
随机推荐
使用 Gradio 在 huggingface 创建应用 Space
一 C#中通过USB操作手机文件
reits基金是什么意思?安全吗?
pc端电脑屏幕常见尺寸
mysql建表常用sql语句
Task19_14_最长公共前缀
第六章 物理层
截图:如何截图?(我想截鼠标右键按出来的图?)
微信小程序 【控制台报错-汇总】
指南针股票软件股票开户安全嘛
BGP总结
一种新的测转速的方法
laravel框架之验证码控制器
OFDM 十六讲 6 Inter symbol Interference
2017年8月历史文章汇总
测试计划包括哪些内容?目的和意义是什么?
Zotero+派盘=私有云盘(大学生必备学习软件)
穿越派如何续购相关产品功能
C#一些简单的知识
ResNet 6大变体对比