在Flutter Firebase中将getter'documents'调用为null

时间:2020-10-24 10:44:42

标签: firebase flutter google-cloud-firestore

当我单击聊天选项卡时。它显示红色屏幕错误几秒钟。然后,它成功检索数据。当我点击错误。我需要第二个streambuilder。

I / flutter(17397):在null上调用了getter'documents'。

I / flutter(17397):接收方:空

I / flutter(17397):尝试调用:文档

Widget chatRoomsList(){
    return StreamBuilder(
        stream: chatRooms,
        builder: (context, snapshot) {
          return snapshot.hasData ? ListView.builder(
              itemCount: snapshot.data.documents.length,
              shrinkWrap: true,
              itemBuilder: (context, index) {

                return StreamBuilder(
                    stream: Firestore.instance.collection("chatRoom").document(snapshot.data.documents[index].data["chatRoomId"]).collection("Chats").orderBy("time",descending: true).limit(1).snapshots(),
                    builder: (context, snapshot1) {
                      return snapshot.hasData ? ListView.builder(
                          itemCount: snapshot1.data.documents.length,
                          shrinkWrap: true,
                          itemBuilder: (context, index1) {
                            return  ChatRoomsTile(
                              userName:snapshot.data.documents[index].data['chatRoomId'].toString().replaceAll("_", "").replaceAll(Constants.myName, ""),
                              chatRoomId: snapshot.data.documents[index].data["chatRoomId"].toString(),
                              message: snapshot1.data.documents[index1]["message"].toString(),
                              Time:snapshot1.data.documents[index1]["time"],
                            );
                          }):Container();

                    });
              }):Container();
        });

  }

1 个答案:

答案 0 :(得分:1)

问题出在第二个StreamBuilder内部。

在那里的构建器中,您正在检查snapshot是否具有数据:

snapshot.hasData

您实际上应该检查snapshot1是否包含数据:

snapshot1.hasData

所以当条件始终返回true时(因为snapshot那时有数据),但是实际使用的数据来自snapshot1,因此它显示错误,直到它实际获取了一些数据为止。 snapshot1来自流。