【发布时间】:2021-06-05 09:10:37
【问题描述】:
在这段代码中,我尝试检索符合以下逻辑的数据:if (title == query || subtitle == query)。这里我的代码使用MergeStream of 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', isEqualTo: query).orderBy('listened', 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 不起作用。我错过了什么?
【问题讨论】:
-
“但是 searchPrograms 不起作用” - 解释一下
doesn't work -
它不返回 Firestore 数据。如果我更改
MergeStream([stream1]);或MergeStream([stream2]);。没关系。 -
所以两个流都不是空的,pub.dev/documentation/rxdart/latest/rx/MergeStream-class.html 的例子对你有用吗?如果您将这两个输入流替换为您的输入流会怎样?你看到了什么?
-
最后的数据是1。我想我明白你的意思了。那么我该如何解决呢?
-
CombineLatestStream 也许?文档说:“只要任何源流序列发出一个项目,就使用
combiner函数将给定的流合并到一个流序列中。”
标签: flutter google-cloud-firestore rxdart