【问题标题】:User returns null before loading init state用户在加载初始化状态之前返回 null
【发布时间】:2020-02-02 04:28:47
【问题描述】:

用户身份验证后,它们会被重定向到 Home.dart 文件。在 Home 的构建中,有一个底部导航栏功能,用于保存应用程序页面。
在我的家庭初始化状态中,我调用了一个将用户模型加载到变量中的函数:

void initState() {
    super.initState();
    getUserData();
    pageController = PageController();
}

这样,我可以访问所有应用程序的当前用户数据,而无需继续读取 Firebase,因为模型 "User currentUser;" 在应用程序运行时加载。

但是,在登录后的一秒钟内,用户在重定向到导航栏时返回 null,这是由于在我的初始化状态下调用 getUserData 时的 Firebase 延迟。

如何在加载 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);
  }

【问题讨论】:

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


    【解决方案1】:

    只需将 getuserdata() 转换为异步函数 喜欢:

    getUserData() async {
    return await //your code }
    

    或者

    getUserData() async {
    UserData = await //response from server
    return UserData; }
    

    【讨论】:

    • 它已经是异步/等待。问题是登录后的初始页面(提要)在 getUserData 运行后没有更新。
    • 您可以尝试在重定向到appbar后放置一个空的setState函数,它会起作用,但这不是解决问题的正确方法,希望有人能提供帮助。
    【解决方案2】:

    您可以更改等待调用

    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);
      }
    

    【讨论】:

      【解决方案3】:

      感谢大家的回复和建议解决方案。 我最终使用了 Provider 包。我遇到了一些问题,这就是为什么我的代码结构就像我在这个问题中展示的那样。但总的来说,我认为提供者是用户管理的最佳解决方案,像这样的错误很容易解决。 对于将来遇到此问题的任何人,请检查: https://pub.dev/packages/provider

      【讨论】:

        猜你喜欢
        • 2021-08-28
        • 1970-01-01
        • 2017-02-28
        • 1970-01-01
        • 2020-07-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-12-09
        相关资源
        最近更新 更多