当我单击聊天选项卡时。它显示红色屏幕错误几秒钟。然后,它成功检索数据。当我点击错误。我需要第二个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();
});
}
答案 0 :(得分:1)
问题出在第二个StreamBuilder
内部。
在那里的构建器中,您正在检查snapshot
是否具有数据:
snapshot.hasData
您实际上应该检查snapshot1
是否包含数据:
snapshot1.hasData
所以当条件始终返回true时(因为snapshot
那时有数据),但是实际使用的数据来自snapshot1
,因此它显示错误,直到它实际获取了一些数据为止。 snapshot1
来自流。