扑朔迷离中没有这样的方法,对null调用了方法add

时间:2020-09-02 08:18:17

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

 FirebaseFirestore.instance
          .collection('women')
          .snapshots()
          .map((snapshot) => snapshot.docs
              .map((document) => CategoryAvatar.fromJson({...document.data()}))
              .toList())
          .listen((avatar) {
        avatarsInfo.addAll(avatar);

当我开始调试时,此异常在IDE的上面代码的第三行出现:

发生了异常。 NoSuchMethodError(NoSuchMethodError:方法'add'在null上调用。 接收者:null 尝试调用:add(“ MethodChannelQuerySnapshot的实例”)

在调试时,由于某些奇怪的原因,调试器总是会通过第五行和第六行,我的意思是程序无法执行这些行。

运行代码时,以下文本显示在调试控制台上

D / HwCustConnectivityManagerImpl(8132):isBlockNetworkRequestByNonAis,INVALID_SUBSCRIPTION_ID D / ConnectivityManager(8132):requestNetwork,调用的应用程序是:com.sincerity.sandra W / DynamiteModule(8132):找不到providerinstaller的本地模块描述符类。 I / DynamiteModule(8132):考虑本地模块providerinstaller:0和远程模块providerinstaller:0 W / ProviderInstaller(8132):无法加载providerinstaller模块:找不到可接受的模块。本地版本为0,远程版本为0。 D / HwCustConnectivityManagerImpl(8132):isBlockNetworkRequestByNonAis,INVALID_SUBSCRIPTION_ID

2 个答案:

答案 0 :(得分:1)

在查询开始时添加 await 关键字已解决了问题

     await _firebaseFirestore.collection('women').get().then(
        (QuerySnapshot querySnapshot) {
          querySnapshot.docs.forEach(
            (doc) {
              avatarsInfo.add(
                CategoryAvatar.fromJson(
                  {
                    ...doc.data(),
                  },
                ),
              );
            },
          );
        },
      );

答案 1 :(得分:0)

尝试此方法是可行的,但它只能在一个周期内检索数据。

  FirebaseFirestore.instance.collection('women').snapshots().map((snapshot) {
      snapshot.documents.forEach((snapshot) {
        print(snapshot.data);
        CategoryAvatar avatar = CategoryAvatar.fromJson(snapshot.data());
        avatarsInfo.addAll(avatar);
      });
    }).toList();

如果您正在流式传输数据,请尝试

  Stream<List<CategoryAvatar>> avatarList() {
    return FirebaseFirestore.instance.collection('women').
        .snapshots()
        .map((value) => value.documents
            .map((result) => CategoryAvatar.fromJson(result.data()))
            .toList());
  }

我希望我能帮助您