gpt4 book ai didi

dart - 使用 SharedPreferences 设置登录状态并在 App 启动时检索它 - Flutter

转载 作者:IT王子 更新时间:2023-10-29 06:54:53 26 4
gpt4 key购买 nike

我有一个 flutter 应用程序,我必须在应用程序启动时检查登录状态并相应地调用相关屏幕。

用于启动应用程序的代码:

class MyApp extends StatefulWidget {
@override
MyAppState createState() {
return new MyAppState();
}
}


class MyAppState extends State<MyApp> {

bool isLoggedIn;

Future<bool> getLoginState() async{
SharedPreferences pf = await SharedPreferences.getInstance();
bool loginState = pf.getBool('loginState');
return loginState;
// return pf.commit();
}

@override
Widget build(BuildContext context) {

getLoginState().then((isAuth){
this.isLoggedIn = isAuth;
});


if(this.isLoggedIn) {return Container(child: Text('Logged In'));}
else {return Container(child: Text('Not Logged In));}

}
}

我可以保存 SharedPreference 并在此处检索它,问题是因为 getLoginState() 是一个异步函数,this.isLoggedIn 在执行 if 条件时为 null。 if 语句中的 bool 断言失败,应用程序崩溃。

如何确保if条件中使用的bool变量isLoggedIn在执行if语句时有值?

如有任何帮助,我们将不胜感激。

最佳答案

您可以使用 FutureBuilder来解决这个问题。

@override
Widget build(BuildContext context) {
new FutureBuilder<String>(
future: getLoginState(),
builder: (BuildContext context, AsyncSnapshot<String> snapshot) {
switch (snapshot.connectionState) {
case ConnectionState.active:
case ConnectionState.waiting:
return new Text('Loading...');
case ConnectionState.done:
if (snapshot.hasData) {
loginState = snapshot.data;
if(loginState) {
return Container(child: Text('Logged In'));
}
else {
return Container(child: Text('Not Logged In));
}
} else {
return Container(child: Text('Error..));
}
}
},
)
}

注意:我们不需要 isLoggedIn 状态变量。

关于dart - 使用 SharedPreferences 设置登录状态并在 App 启动时检索它 - Flutter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52080852/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com