用户身份验证后,它们将被重定向到Home.dart文件。在Home的版本中,有一个底部的导航栏功能可保存应用程序页面。
在home初始化状态下,我调用一个将用户模型加载到变量中的函数:
void initState() {
super.initState();
getUserData();
pageController = PageController();
}
那样,由于模型“ User currentUser;” 是在应用程序运行时加载的,因此我可以访问所有应用程序中的当前用户数据,而无需继续阅读firebase。
但是,在登录后的一秒钟内,由于在我的初始化状态上调用getUserData时的火力等待时间,用户重定向到导航栏时会返回null。
一旦加载currentUser模型,如何更新初始页面(在这种情况下为feed.dart)?如果我在屏幕之间切换并返回供稿,则一切正常。我只需要页面重新更新,而不必强制重新加载。
getUserData() async {
//Loads uidPath with current user id.
getCurrentUser();
//Loads currentUser model with current user data.
DocumentSnapshot doc = await usersRef.document(uidPath).get();
doc = await usersRef.document(uidPath).get();
currentUser = User.fromDocument(doc);
}
答案 0 :(得分:0)
只需将getuserdata()转换为异步函数 喜欢:
getUserData() async {
return await //your code }
或
getUserData() async {
UserData = await //response from server
return UserData; }
答案 1 :(得分:0)
您可以更改等待呼叫
getUserData() async {
//Loads uidPath with current user id.
getCurrentUser();
//Loads currentUser model with current user data.
DocumentSnapshot doc = await usersRef.document(uidPath).get();
doc = usersRef.document(uidPath).get();
currentUser = await User.fromDocument(doc);
}
答案 2 :(得分:0)
感谢大家答复和提出解决方案。 我最终使用了提供程序包。我遇到了一些问题,这就是为什么我的代码结构像我在此问题中所示的那样。但是总的来说,我认为提供商是用户管理的最佳解决方案,像这样的错误很容易解决。 对于以后遇到此问题的任何人,请检查: https://pub.dev/packages/provider