StreamZip仅显示一阶流

时间:2019-12-01 04:41:02

标签: flutter dart

我正在尝试使用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();

我的数据

enter image description here

1 个答案:

答案 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