使用 rxDart 合并 Firestore 流
Posted
技术标签:
【中文标题】使用 rxDart 合并 Firestore 流【英文标题】:Merge Firestore streams using rxDart 【发布时间】:2019-02-13 18:31:10 【问题描述】:我正在尝试使用 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]));
【问题讨论】:
您可能想改用combineLatest
。
见***.com/questions/51930918/…
【参考方案1】:
根据您的用例,您可能不需要 RxDart 来执行此操作。
如果您只想将两个 Firestore 流合并到一个 Dart Stream
,您可以使用 dart:async
包中的 StreamZip
。
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();
【讨论】:
【参考方案2】:您可以使用 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]);
【讨论】:
请问我怎样才能访问这些数据以上是关于使用 rxDart 合并 Firestore 流的主要内容,如果未能解决你的问题,请参考以下文章