gpt4 book ai didi

firebase - 用RxDart在dart-flutter中进行Concanete 2 Firestore QuerySnapShot流

转载 作者:行者123 更新时间:2023-12-03 04:20:34 24 4
gpt4 key购买 nike

我的Flutter项目有一个StreamBuilder小部件。
它监听 Firestore查询快照流
如果我仅使用一个查询流,就没有问题,一切都会按预期进行。
但是,如果我连接2个流,那么它仅侦听第一个流。
我认为,stream1不会发出所有数据,因此stream2不会附加到结果流。
但是我不知道如何解决这个问题。
感谢您的帮助。谢谢。

Stream<List<MyLog>> myLogStream() {
Stream<QuerySnapshot> stream1 = Firestore.instance
.collection('devicelog/1/mylog')
.snapshots();
Stream<QuerySnapshot> stream2 = Firestore.instance
.collection('devicelog/2/mylog')
.snapshots();
return Rx.concat([stream1, stream2]).map((qShot) => qShot.documents
.map((doc) => MyLog.fromCloud(doc.documentID, doc.data))
.toList());
}

最佳答案

Concat waits to subscribe to each additional Observable that you passto it until the previous Observable completes.


concat在stream1完成之前不会读取stream2

Concat will not see, and therefore will not emit, any items thatObservable emits before all previous Observables complete


这就是为什么它仅侦听第一流的原因。因为它必须先完成第一个流,然后才能移至下一个流,到那时为时已晚,因为stream2已经发出了一些物品
source
您可能正在寻找的是Rx.combineLatest,因此可以将stream1 stream2发出的每个对象组合到一个要发送到stream3的对象中
Stream<List<MyLog>> myLogStream() {
Stream<QuerySnapshot> stream1 =
Firestore.instance.collection('devicelog/1/mylog').snapshots();
Stream<QuerySnapshot> stream2 =
Firestore.instance.collection('devicelog/2/mylog').snapshots();
return Rx.combineLatest2(stream1, stream2,
_fun_That_Combines_Each_Object_From_stream1_And_stream2);
}

QuerySnapshot _fun_That_Combines_Each_Object_From_stream1_And_stream2(
QuerySnapshot mylog1, QuerySnapshot mylog2) {
// do some magic
}

关于firebase - 用RxDart在dart-flutter中进行Concanete 2 Firestore QuerySnapShot流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62859242/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com