用户在加载初始化状态之前返回null

时间:2019-10-03 20:01:59

标签: firebase flutter dart google-cloud-firestore firebase-authentication

用户身份验证后,它们将被重定向到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);
  }

3 个答案:

答案 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

相关问题