【问题标题】:How we can mix streams in dart?我们如何在飞镖中混合流?
【发布时间】:2019-01-13 14:47:15
【问题描述】:

让两个流传递两种不同类型的数据。 我想要这两个流中的一个流,它组合数据并包装在数据类中并传递它。

例子:

Stream<String> stream1;
Stream<String> stream2;

class Data{
    String s1;
    String s2;
    Data(this.s1,this.s2);
}

【问题讨论】:

    标签: dart flutter dart-async


    【解决方案1】:

    对此没有“开箱即用”的解决方案。您通常必须为此创建自定义逻辑(称为StreamTransformer)。

    另一方面,您可以使用 3rd 方库。如rxdart,其中包含多个流融合算子:

    Stream<String> stream1;
    Stream<String> stream2;
    Stream<String> concat = Observable.combineLatest2(stream1, stream2, (a, b) => a + b);
    

    【讨论】:

    • 那么StreamGroup呢?我从未使用过它,但文档似乎说它是一个流多路复用器
    • 嗯,它没有随 dart SDK 提供,并且要求所有流值具有相同的类型
    • StreamGroup.merge([stream1, stream1]).map((event) { //event will be of type Object if the type aren't the same return event; });
    【解决方案2】:

    使用 stream_transform 包中的流转换函数 combineLatest(在 pubspec.yml 中添加对“stream_transform”的依赖)。

    import 'package:stream_transform/stream_transform.dart' show combineLatest;
    
    Stream<Data> combinedStream(Stream<String> stream1, Stream<String> stream2) {
      return stream1.transform(combineLatest(stream2, (s1, s2) => Data(s1, s2)));
    }
    
    

    也在此处回答:https://stackoverflow.com/a/55912217/3635696(没有说明如何访问 combineLastest 函数)。

    【讨论】:

    • 尝试将一些附件添加到您的答案中,以提高其质量。
    猜你喜欢
    • 2022-11-10
    • 1970-01-01
    • 2018-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-06-28
    • 1970-01-01
    • 2013-08-12
    • 2020-11-28
    相关资源
    最近更新 更多