gpt4 book ai didi

android - 返回小部件时Future Builder不运行

转载 作者:行者123 更新时间:2023-12-03 03:35:06 24 4
gpt4 key购买 nike

我正在运行具有Firebase身份验证的FutureBuilder。我希望Flutter可以在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;
}

}

我的 future builder 如下:
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重新运行该应用程序时,它会正确更新小部件。

最佳答案

当您从任何其他屏幕返回导航时,由于您正面临该问题,因此不会调用initstate。

从登录屏幕返回时,可以通过以下方式调用SetState。

 Navigator.push(context, MaterialPageRoute(builder: (_) => 
Demo2())).then((value) => {
setState(() {
future_user = setUserStatus();
});
});

我不知道您的用户状态如何变化,所以我只是演示了如何从登录屏幕返回时如何调用某种方法或您想执行的任何操作,以便获取新数据。

关于android - 返回小部件时Future Builder不运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61559456/

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