因此,我的集合中的每个用户都有一个指向群聊的引用列表,这些群聊是firestore screenshot的一部分
我正在尝试获取此列表,并从中创建所有这些单独的文档快照流的流。我有点想要一个像集合流这样的东西,但我不想在我的firestore中创建一个实际的新集合。然后,从这个文档快照列表中,我想创建一个小部件来表示每个groupchat文档。在下面的代码中,这个小部件由一个Text()小部件表示,但稍后它将更加丰富。
Stream getChatsFromRefs(List<DocumentReference> refs) {
List<Stream<DocumentSnapshot>> chatSnapList =
List<Stream<DocumentSnapshot>>();
for (DocumentReference ref in refs) {
chatSnapList.add(ref.snapshots());
}
return Rx.combineLatest(chatSnapList, (values) => values.last);
}
class ChatList extends StatefulWidget {
@override
_ChatListState createState() => _ChatListState();
}
class _ChatListState extends State<ChatList> {
@override
Widget build(BuildContext context) {
DocumentSnapshot userSnapshotData = Provider.of<DocumentSnapshot>(context);
print("no error so far");
return StreamBuilder<List<DocumentSnapshot>>(
stream:
DatabaseService().getChatsFromRefs(userSnapshotData.data()["refs"]),
builder: (_, snapshot) {
final documents = snapshot.data;
return ListView.builder(
itemCount: documents.length,
itemBuilder: (_, index) => Text(documents[index]["name"]),
);
});
}
}
这是我最近尝试的方法,但我遇到了这个错误
非常感谢大家的帮助!
发布于 2021-01-17 22:32:15
如果有人感兴趣,我想出了解决方案。
Stream getChatsFromRefs(List<DocumentReference> refs) {
List<Stream<Chat>> chatStreamList = List<Stream<Chat>>();
for (DocumentReference ref in refs) {
chatStreamList.add(ref.snapshots().map(_chatFromDocSnapshot));
}
return Rx.combineLatestList(chatStreamList);
}
这种方法比使用StreamZip更好,因为当任何文档检测到更改时,它都会重新构建,这正是我想要的。
https://stackoverflow.com/questions/65754873
复制相似问题