Flutter 本地存储值引导页和主页面切换
2019-09-26 本文已影响0人
fordG
在移动开发中,第一次安装应用时,引导页是必不可少的, 这里主要操作时,引导页和主页面的切换状态显示问题的实现, 本地存储使用到的是:
dependencies:
flutter:
sdk: flutter
cupertino_icons: ^0.1.2
#本地存储
shared_preferences: ^0.5.3+4
#获取版本号信息
package_info: ^0.4.0+6
- 第一次的想法是在app启动页面MyApp里面去判断,但是发现shared_preferences这个都是异步操作, 需要一步完成, 那么就需要更改UI, 想着把MyApp extends StatefulWidget 已运行发现必须使用StatelessWidget, 直接在MyApp里面改动行不通, 于是定义一个入口Widget
//入口控制页面
class Enter extends StatefulWidget {
@override
EnterState createState() {
// TODO: implement createState
return EnterState();
}
}
class EnterState extends State<Enter> {
//临时显示的Widget
Widget homePage = new Container(color: HexColor("#ffffff"));
@override
void initState() {
// TODO: implement initState
super.initState();
//获取显示的页面
mainPage();
}
@override
Widget build(BuildContext context) {
// TODO: implement build
return MaterialApp(
home: homePage,
);
}
mainPage() async {
String currentVersion = await getVersion();
String storageVersion = await getOldVersion();
print(currentVersion+'/n'+storageVersion);
setState(() {
if(storageVersion == currentVersion){
//版本号相同显示首页
homePage = MainPage();
}else{
//版本号不一致, 显示引导页
homePage = LaunchPage(callback: (){
//引导页点击事件回调
setState(() {
homePage = MainPage();
});
},);
//本地存储新的版本号
setNewVersion();
}
});
}
//获取当前版本号
Future<String>getVersion() async {
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String appName = packageInfo.appName;
String packageName = packageInfo.packageName;
String version = packageInfo.version;
String buildNumber = packageInfo.buildNumber;
return version;
}
//获取旧版本号
Future<String>getOldVersion()async{
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
String version = sharedPreferences.getString('OLD_VERSION') ?? "";
return version;
}
//设置新的版本号
setNewVersion() async {
SharedPreferences sharedPreferences = await SharedPreferences.getInstance();
PackageInfo packageInfo = await PackageInfo.fromPlatform();
String version = packageInfo.version;
sharedPreferences.setString("OLD_VERSION", version);
}
}