【发布时间】:2021-05-17 07:50:30
【问题描述】:
使用 Flutter 和 Firestore,我试图将 10 多个文档放入 Stream。我可以使用映射 QuerySnapshot 的集合上的 .where 子句来做到这一点。但是,10 个限制是一个杀手。
我在我的应用程序中使用提供程序包。因此,在 Flutter 中使用 StreamProvider 构建流时,我可以返回一个
- Stream
- Stream
- Stream
- Stream
我需要介于 1 和 2 之间的东西。
我有一个包含多达 500 个文档的集合,用户可以选择这 500 个文档的任意组合进行查看。用户组装班级名册以查看他们的用户列表。
所以我正在寻找一种方法来获取单个流,例如 30 个文档,然后将它们编译成一个列表:但我需要这个 List 所以,我目前的努力: 感觉我在下面作弊:如果我将快照直接放在上面的 Stream thisStream 中,我会收到等待错误,因为如果我等待,Stream 就不是未来,如果我不等待,它会移动得太快并得到一个空错误。 我如何在 _teacherRosterListFromSnapshot 中映射的示例(这里没有任何问题): 我的 StreamProvider 逻辑和错误: 错误:参数类型“Future AttendeeData 是我的地图类名称。 所以,问题总结: 我可以使用 StreamProvider 的另一种方法获取数据,但它的行为不像 Stream 并且状态没有更新。我希望把它放到 Provider 中,因为我在那里很舒服,而且我可以很容易地管理状态。但是,乞丐不能挑剔。 Future<Stream<List<AttendeeData>>> getStreams() async {
List<Stream<AttendeeData>> getStreamsOutput = [];
for (var i = 0; i < teacherRosterList.length; i++) {
Stream thisStream = await returnTeacherRosterListStream(facility, teacherRosterList[i]);
getStreamsOutput.add(thisStream);
}
return StreamZip(getStreamsOutput).asBroadcastStream();
}
Future<Stream<AttendeeData>> returnTeacherRosterListStream(String thisFacility, String thisID) async {
return facilityList.doc(thisFacility).collection('attendance').doc(thisID).snapshots().map(_teacherRosterListFromSnapshot);
}
}
AttendeeData _teacherRosterListFromSnapshot(DocumentSnapshot doc) {
// return snapshot.docs.map((doc) {
return AttendeeData(
id: doc.data()['id'] ?? '',
authorCreatedUID: doc.data()['authorCreatedUID'] ?? '',
);
}
return MultiProvider(
providers: [
StreamProvider<List<AttendeeData>>.value(
value: DatabaseService(
teacherRosterList: programList,
facility: user.claimsFacility,
).getStreams()),
]
”。
【问题讨论】:
标签: firebase flutter google-cloud-firestore flutter-provider