【问题标题】:Why isn't BroadcastStream a type in Dart?为什么 BroadcastStream 不是 Dart 中的一种类型?
【发布时间】:2019-03-15 03:30:35
【问题描述】:

这实际上是一个严肃的问题。据我所知,创建BroadcastStream的方法如下:

StreamSubscription sc = StreamSubscription();
Stream s = Stream();
sc.addStream(s);
var bs = sc.stream.asBroadcastStream();  // this works
BroadcastStream bs = sc.stream.asBroadcastStream();  //  type error, undefined class BroadcastStream

为什么 BroadcastStream 不是一个类型,而不是需要使用 var?它背后是否真的有理由,是一个错误,还是我错过了其他东西?谢谢。

【问题讨论】:

    标签: dart stream


    【解决方案1】:

    我不确定这两种方式是否有充分的理由,但无论如何都没有必要使用var

    Stream bs = sc.stream.asBroadcastStream();
    

    单订阅流和广播流之间的区别可能不足以保证一个不同的类别。

    另见https://docs.flutter.io/flutter/dart-async/Stream/asBroadcastStream.html

    【讨论】:

    • 绝妙的解决方案!
    【解决方案2】:

    广播流与非广播流具有相同的 API,因此不需要单独的类。它只是一个Stream

    创建广播流的方法是要么拥有一个广播流并对其使用任何流转换器操作(如myBroadcastStream.map(...)),要么使用控制器从头开始创建流,var c = StreamController.broadcast(...);

    您可以使用myStream.isBroadcast检查流是否为广播流。

    您可以将广播流视为一种行为选择、一种策略,而不是一种单独的流类型。流可以使用相同的 API 以多种不同的方式运行。目前我们只有两种行为,但很容易创建第三种行为,比如可以多次监听的流,但不会同时向所有监听器发送相同的事件(就像一个可迭代的可以重复使用)。

    【讨论】:

    • 也看看@Günter Zöchbauer 的回答
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多