如何解决Flutter 合并多个流 Flutter 以在 Firestore 中执行 OR 查询
在此代码中,我尝试检索与此逻辑匹配的数据:if (title == query || subtitle == query)
。这里我的代码使用 MergeStream
的 RxDart
:
//if (title == query)
Stream<QuerySnapshot> searchProgramsByTitle(String query) async* {
if (query.length == 0) {
yield* fireStore.collection('programs').orderBy('listened',descending: true).snapshots();
}
else {
yield* fireStore.collection('programs').where('title',isEqualTo: query).orderBy('listened',descending: true).snapshots();
}
}
//if (subtitle == query)
Stream<QuerySnapshot> searchProgramsBySubtitle(String query) async* {
if (query.length == 0) {
yield* fireStore.collection('programs').orderBy('listened',descending: true).snapshots();
}
else {
yield* fireStore.collection('programs').where('subtitle',descending: true).snapshots();
}
}
// OR query
Stream<QuerySnapshot> searchPrograms(String query) async* {
Stream<QuerySnapshot> stream1 = searchProgramsByTitle(query);
Stream<QuerySnapshot> stream2 = searchProgramsBySubtitle(query);
yield* MergeStream([stream1,stream2]);
}
searchProgramsByTitle
和 searchProgramsBySubtitle
单独工作正常。但是 searchPrograms
不起作用。我错过了什么?
解决方法
感谢 pskink 的这些可爱的回答。我设法解决了这个问题:
Stream<List> searchPrograms(String query) async* {
Stream<QuerySnapshot> stream1 = searchProgramsByTitle(query);
Stream<QuerySnapshot> stream2 = searchProgramsBySubtitle(query);
yield* rx.CombineLatestStream.combine2(stream1,stream2,(QuerySnapshot a,QuerySnapshot b) => [...a.docs.map((e) => e.id),...b.docs.map((e) => e.id)]);
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。