使用 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 流的主要内容,如果未能解决你的问题,请参考以下文章

Flutter 将两个 Firestore 流合并为一个流

如何在firebase firestore中准确合并多个流

Rxdart combinelaststream 功能不起作用

Flutter 使用流“RxDart”提交登录 Bloc

Dart流.asBroadcastStream内存泄漏

Flutter/Firestore - 在流构建器中的动态列表视图上实现“分页”