使用rxDart合并Firestore流

时间:2018-09-08 19:48:59

标签: firebase stream dart flutter rxdart

我正在尝试使用RxDart将Firestore中的两个流合并为一个流,但这只是返回一个流的结果

Stream getData() {
    Stream stream1 = Firestore.instance.collection('test').where('type', isEqualTo: 'type1').snapshots();
    Stream stream2 = Firestore.instance.collection('test').where('type', isEqualTo: 'type2').snapshots();
    return Observable.merge(([stream2, stream1]));
}

2 个答案:

答案 0 :(得分:5)

根据您的用例,您可能不需要RxDart来执行此操作。 如果您只想将两个Firestore流合并到一个Dart Stream中,则可以使用StreamZip包中的dart:async

import 'dart:async';     

Stream<List<QuerySnapshot>> getData() {
  Stream stream1 = Firestore.instance.collection('test').where('type', isEqualTo: 'type1').snapshots();
  Stream stream2 = Firestore.instance.collection('test').where('type', isEqualTo: 'type2').snapshots();
  return StreamZip([stream1, stream2]).asBroadcastStream();
}

答案 1 :(得分:3)

您可以使用mergeWith通过如下所示的RxDart从两个单独的流中获取一个流,

 Stream getData() {
    Stream stream1 = Firestore.instance.collection('test').where('type', isEqualTo: 'type1').snapshots();
    Stream stream2 = Firestore.instance.collection('test').where('type', isEqualTo: 'type2').snapshots();
    return stream1.mergeWith([stream2]);
  }