我显然误解了如何StreamGroup.merge
工作原理或流如何工作或两者兼而有之!我有两个流正在查询 firestore 中的同一字段。我正在使用合并来创建一个名为mergedStream
。这在 StreamBuilder 中用于为应用程序提供服务。
这是我的代码:
Stream<List<Order>> stream1({Order order}) {
return _service.collectionStream(
path: APIPath.orders(),
queryBuilder: (query) =>
query.where('orderStatus', isEqualTo: 'Pending'),
builder: (documentSnapshot) => Order.fromFirebase(documentSnapshot));
}
Stream<List<Order>> stream2({Order order}) {
return _service.collectionStream(
path: APIPath.orders(),
queryBuilder: (query) =>
query.where('orderStatus', isEqualTo: 'Preparing'),
builder: (documentSnapshot) => Order.fromFirebase(documentSnapshot));
}
以及我用于流构建器的合并流:
Stream<List<Order>> mergedStream() {
final s1 = preparingStream();
final s2 = pendingStream();
return StreamGroup.merge([s2, s1]);
}
切换顺序[s2, s1]
更改显示的流。当页面加载时,我立即看到另一个流,但它消失了,另一个流出现了......我如何合并流......?
编辑:我添加了 flutter 标签,因为阅读它可能是problem with StreamBuilder
编辑:这有点帮助:(评论中的链接,并且只是流合并的概念证明)但是流searchResult()
当其中一个流中的状态发生变化时不会更新...您必须刷新浏览器。 (颤动网络)
Stream<List<Order>> searchResult() {
List<Stream<List<Order>>> streamList = [stream1(), stream2()];
var x = Rx.merge(streamList).scan<List<Order>>((acc, curr,i) {
return acc ?? <Order>[]
..addAll(curr);
});
//this test shows that the stream gets contents from both query streams
// x.map((convert){ convert.documents.forEach((f){print(f.data["name"]);});}).listen(print);
return x;
}