【问题标题】:How to use StreamZip with StreamBuilder?如何将 StreamZip 与 StreamBuilder 一起使用?
【发布时间】:2021-03-15 21:18:10
【问题描述】:

我有两个流

stream1
stream2

我可以给StreamBuilder 一个,它可以工作。例如:

return StreamBuilder(
  stream: stream1,

但是当我与 StreamZip 结合时,它现在给出错误:

StreamZip combinedStream() {
return StreamZip(stream1, stream2]);

}

return StreamBuilder(
  stream: combinedStream,

我如何将stream1stream2 结合起来并给StreamBuilder

【问题讨论】:

    标签: flutter dart reactive-streams dart-async rxdart


    【解决方案1】:
    import 'package:rxdart/rxdart.dart';
    import 'package:tuple/tuple.dart';
    
    
    final Stream<A> stream1;
    final Stream<B> stream2;
    final Stream<Tuple2<A, B>> stream = Rx.zip2(
        stream1,
        stream2,
        (A a, B b) => Tuple2(a, b),
    );
    
    StreamBuilder<Tuple2<A, B>>(
        stream: stream,
        builder: (ctx, snapshot) { ... }
    );
    

    【讨论】:

      【解决方案2】:
      Stream<List<QuerySnapshot>> combineStream() {
      
        return StreamZip([stream1, stream2]);
      
      }
      
      
      return StreamBuilder(
        stream: combineStream(),
        builder: (context, snapshot) {
      
          List<DocumentSnapshot> documentSnapshot = [];
      
          List<dynamic> querySnapshot = snapshot.data.toList();
      
          querySnapshot.forEach((query) {
            documentSnapshot.addAll(query.docs);
          })
      
        }
      );
      

      您的 documentSnapshot 现在包含您的组合流

      【讨论】:

      • 感谢您的回复! StreamZip 不是更简单的方法吗?
      • 我正在使用 combineStream 中的 StreamZip 将两个流压缩在一起。
      • 感谢您的回复!为什么不能单独使用 StreamZip?
      • 我没试过那样做。我发布的代码 sn-p 是我目前在项目中使用它的方式,它对我有用。
      【解决方案3】:

      您可以使用StreamGroup.merge 将两个Streams 合并为一个Stream

      StreamBuilder(
        stream: StreamGroup.merge(stream1, stream2),
      

      dart:async

      【讨论】:

      • 感谢您的回复!我试试这个,但它在 UI 中更新不正确。它只显示一个流结果。也许是因为它在错误的时间发射?
      • 它应该从两个流中发出。可能由于某些条件而没有发出另一个流?
      • 请分享steam1steam2 数据,以便我们知道您是如何创建stream1stream2 变量以及传递给merge 函数的数据类型。谢谢。期待听到你的声音。
      猜你喜欢
      • 1970-01-01
      • 2020-03-09
      • 2021-12-05
      • 1970-01-01
      • 2021-07-19
      • 2021-01-02
      • 1970-01-01
      • 2023-03-13
      • 2014-09-25
      相关资源
      最近更新 更多