【发布时间】:2020-08-16 22:40:33
【问题描述】:
我正在运行具有 Firebase 身份验证的 FutureBuilder。我期待颤振在 FutureBuilder 内部检查用户登录的状态。如果用户登录到要显示的小部件应该是一个logout 图标。如果用户已注销,则要显示的小部件应为 login
我对 Future 的作用如下:
Future<String> setUserStatus()
async {
userStatus = await FirebaseAuth.instance.currentUser();
uid = userStatus.uid;
print('after the query - The user is $uid after');
if(uid == null){
return uid = null;
} else if( uid != null){
return uid = userStatus.uid;
}
}
我的未来建设者如下:
FutureBuilder<String>(
future: future_user,
builder: (BuildContext context, snapshot) {
String update_status = snapshot.data;
if(update_status == null){
return //Widget for login
}
else if(update_status != null){
return //widget for logout
}
如果我单击注销按钮,这可以正常工作。小部件正确更新,并为用户提供现在登录的选项。注销的功能是:
Future<String> logout() async {
await FirebaseAuth.instance.signOut();
setState(() {
future_user = setUserStatus();
});
}
问题是当我登录时,用户被带到一个单独的登录页面。登录后,当我导航回运行 FutureBuider 的主页时,它没有获取用户的 uid(返回 null)并且仍然显示 login 图标。我在 initState 中调用 Future Builder,所以当我返回时它不应该运行它吗?
Future<String> future_user;
@override
void initState() {
super.initState();
setState(() {
future_user = setUserStatus();
});
}
当我从 Android Studio 重新运行应用程序时,它会正确更新小部件。
【问题讨论】:
标签: android flutter dart firebase-authentication