当前位置:网站首页>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,
);
}
}
边栏推荐
猜你喜欢
随机推荐
nlp 评论分类实现总结
测试用例的原则、缺陷报告怎么写你都知道吗?
OSPF总结作业
mysql建表常用sql语句
Laravel框架之数据库配置
SAP ABAP debug的七种方法及错误消息定位
HCIP2--RIP实验
GRPC学习(An RPC library and framework)
OFDM 十六讲 6 Inter symbol Interference
office:如何查看并下载office账户的订阅软件
Mysql Workbench导出sql文件出错:Error executing task: ‘ascii‘ codec can‘t decode byte 0xd0 in position 26:
laravel框架之验证码控制器
win10电脑:电脑触摸板控制
HCIP2--HCIA复习
爬虫学习整理
TCP三次握手、四次断开
关于MODBUS RTU的T3.5 、T1.5的时序问题
第二章 关系数据库概述
Laravel框架之文件上传
多种决策树及应用 笔记