这是the question asked here的后续问题。长话短说,我试图将Flutter Firebase查询仅限制为列表中包含的值。
这是工作代码,最后还有一个附加问题。使用“份额”集合并将ID字段添加到“项目”集合中,如下所示:
我现在能够使用一个Stream来(按用户)检索我的股票,然后将该列表用作第二个Stream中的查询,如下所示:
@override
Stream<Map<String, dynamic>> getUserSharesStream({@required String uid}) {
return _firestore.collection('shares').doc(uid).snapshots().map((doc) => doc.data());
}
@override
Stream<List<Map>> getListOfProjectsForUser({@required String uid, @required List<String> shares}) {
var ref = _firestore.collection('projects');
return ref
.where('id', whereIn: shares)
.snapshots()
.map((QuerySnapshot snapshot) => snapshot.docs.map((DocumentSnapshot doc) => doc.data()).toList());
}
在应用程序中,我得到与用户共享的项目列表,如下所示:
stream: userSharesQuery,
builder: (BuildContext context, AsyncSnapshot snapshot) {
if (snapshot.hasData) {
Map<String, dynamic> result = snapshot.data;
projectsList = result.keys.toList();
通过将该列表输入我的projectsListStream.builder
中,我得到了与用户共享的项目的列表,这就是原始问题的答案。
我剩下的问题是:很明显,我在查询限制列表中限制了10个项目。那么对于共享项目数更大大于10的实例, YOU 架构师将如何?
我是否应该放弃尝试限制查询,而只是每次都解析整个项目列表,寻找与用户共享列表匹配的projectIds
?还是有一种方法可以多次调用流,每次调用10条清单?还是您会建议一个完全不同的方案来完成任务?
答案 0 :(得分:1)
我知道我来晚了,但是我试图提出类似的建议,所以如果有人想使用快照而不是获得实时视频流,这会有所帮助
使用rx package name_counts
,您可以将多个流拆分成长度小于或等于10的数组,然后将其合并
name_counts['Yoga1']