我有这个 StreamBuilder
,它有一个 ConnectionState
处于活动状态,但流里面没有文档。我正在使用 Firebase
,当我控制集合 Chats
时,我可以看到其中有 1 个文档,所以我不明白为什么它的长度是 0
。
这是 StreamBuilder :
StreamBuilder<QuerySnapshot>(
stream: widget.database.streamChats(widget.user),
builder: (context, snapshot) {
if (snapshot.connectionState == ConnectionState.active) {
print(snapshot);
print("Total elements in the stream : " +
snapshot.data.docs.length.toString());
snapshot.data.docs.forEach((element) async {
ChatItem item = new ChatItem.fromDocument(element);
print("Chat item is : ${item.id}");
Artista receiver = await widget.database.getArtist(
item.path,
item.path.split("/").last,
);
ChatCard card = new ChatCard(
database: widget.database,
sender: widget.user,
receiver: receiver,
);
list.add(card);
});
return SingleChildScrollView(
child: Column(
children: list,
),
);
} else {
return CircularProgressIndicator();
}
},
),
这是Stream
函数:
Stream<QuerySnapshot> streamChats(Artista sender) {
return FirebaseFirestore.instance
.collection("ids")
.doc("tabs")
.collection(sender.id[0].toLowerCase())
.doc(sender.id[0].toLowerCase())
.collection("chats")
.snapshots();
}
我需要说 ChatCard
只是一个 ListTile
所以基本上对于流中的每个文档都会创建一个数据结构( ChatItem
),并且从这个结构中遵循一个新的 Widget将显示给用户,ChatCard
。此小部件将添加到一个列表中,该列表将作为 Column
的子项传递。