在我的main.dart文件中,我想检查是否已登录用户,以便将其定向到适当的屏幕。我正在使用SharedPrefence从Firebase存储用户详细信息。我该如何告诉我的函数等待我的SharedPreference异步函数完成执行,然后才能呈现相应的小部件。
下面是我的代码
Widget _gotoHomeScreen() {
AuthService.getuserPrefEmail().then((email) {
print(email);
AuthService.email = email;
if (email == null) {
return LoginScreen();
} else {
AuthService.uid = email;
return HomeMenuScreen();
}
});
}
您不必等待构建,您应该构建一些东西,向用户显示应用程序正在加载一些东西(或黑屏),然后在功能结束时重新构建。
您可以在创建小部件时将其Widget变量设置为默认值,例如使用CircularProgressIndicator
,然后使用setState对其进行更改,如下所示:
class YourWidgetState extends State<YourWidget> {
Widget _body = CircularProgressIndicator(); // Default Body
@override
void initState(){
_gotoHomeScreen();
}
@override
Widget build(BuildContext context){
return _body;
}
Widget _gotoHomeScreen() {
AuthService.getuserPrefEmail().then((email){
AuthService.email = email;
if (email == null) {
setState(() => _body = LoginScreen());
} else {
AuthService.uid = email;
setState(() => _body = HomeMenuScreen());
}
});
}
}
另一种方法是使用变量来通知您有关加载情况,例如bool finishedLoading
,并在完成后调用setState
来更改值,使用email
您设置的变量来知道用户何时登录,并像这样进行条件构建:
bool loading = true;
@override
Widget build(BuildContext context){
if(loading) return CircularProgressIndicator();
if(AuthService.email == null)
return LoginScreen();
else
return HomeMenuScreen();
}
Widget _gotoHomeScreen() {
AuthService.getuserPrefEmail().then((email){
AuthService.email = email;
if (email != null) {
AuthService.uid = email;
}
setState((){ loading = false; });
});
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句