我正在尝试使用StreamZip
来合并2个流。这是我的工作
StreamZip([stream1, stream2]).listen((data){
_queryController.sink.add(data);
});
它将仅发送第一个流(stream1
),但是当我将顺序更改为
StreamZip([stream2, stream1]).listen((data){
_queryController.sink.add(data);
});
它将显示stream2
的结果。我该如何解决?我错过了什么吗?
这是流
stream1 = databaseReference
.collection("userChat")
.where("from", isEqualTo: userId)
.orderBy("messageDate", descending: true)
.snapshots();
stream2 = databaseReference
.collection("userChat")
.where('to', isEqualTo: userId)
.orderBy("messageDate", descending: true)
.snapshots();
我的数据
答案 0 :(得分:0)
Zip仅在两个流中有一对新值时才发出新值(如果第一个流中有新值,它将等待第二个流中有新值)。您可能要使用combineLatest
。当两个流中的任何一个发送新值时,它将合并两个流中的值:
final combinedStream = stream1.transform(combineLatest(stream2, (obj1, obj2) {
// Combine both objects and return a new one
return CombinedData(obj1, obj2);
}));
class CombinedData {
final List to;
final List from;
CombinedData(this.to, this.from);
}
dependencies:
stream_transform: ^0.0.2