【问题标题】:Flutter The method '[]' was called on null errorFlutter 方法 '[]' 在 null 错误上被调用
【发布时间】:2020-01-05 19:41:55
【问题描述】:

我有一个带有 Firebase 后端的 Flutter 应用。我正在使用电子邮件和谷歌登录方法。当用户第一次使用谷歌登录方法登录时,这个奇怪的错误会弹出一秒钟。 (当用户使用电子邮件/pswrd 注册时,不会出现)

在构建 StreamBuilder(dirty, state: _StreamBuilderBaseState>#e1ffb) 时引发了以下 NoSuchMethodError: 在 null 上调用了方法“[]”。 接收方:空 尝试调用:

这是我在 github 上的代码:https://github.com/TenPetr/fridgy (这个错误可能是由 lib/pages/home.dart 文件引起的)

感谢您的回答!

【问题讨论】:

  • 在空列表中调用元素时出现此错误,请在 Stream Builder 中检查您的列表

标签: firebase flutter google-cloud-firestore


【解决方案1】:

这是因为当 Stream 处于加载状态时,解决此问题的方法是使用流的 ConnectionState 并显示 ProgressBar 或空容器。

//Data Logic
Stream<QuerySnapshot> snapshot =  Firestore.instance.collection("collection_name").snapshots();

//Ui Logic
StreamBuilder(
  stream: snapshot,
  builder: (BuildContext context, AsyncSnapshot<QuerySnapshot> snapshot) {
    if(snapshot.connectionState == ConnectionState.active) {
      //Further Logic
      return Text('It works');
    } else {
      return CircularProgressIndicator();
    }
  },
);

【讨论】:

  • 查看了您的代码库,似乎firebaseAuth User Stream 需要一些时间来加载。
    您现在可以做的是等待该流完成或设置 StreamProvider 的 initialData 属性。
    StreamProvider&lt;FirebaseUser&gt;.value( value: AuthService().isLogged, initialData: TempUser, child: child );
  • 嗯,是的,你可能是对的,但我已经弄清楚了。我没有使用方法检查具有当前用户 ID 的文档是否存在,而是使用了 authResult 属性 result.additionalUserInfo.isNewUser,它是布尔值。所以我可以确定用户是否是第一次登录。无论如何,感谢您的时间和帮助!
【解决方案2】:

我发现错误是由于用户@Preet Parekh 造成的。我通过删除负责确定用户是否第一次登录的方法来解决这个问题。而不是这个,我在 AuthResult 上使用了属性 - result.additionalUserInfo.isNewUser

https://firebase.google.com/docs/reference/android/com/google/firebase/auth/AdditionalUserInfo

感谢您的帮助。

【讨论】:

    猜你喜欢
    • 2021-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-08-11
    • 2020-04-09
    • 2020-06-12
    • 2020-06-07
    • 2020-01-22
    • 1970-01-01
    相关资源
    最近更新 更多