【问题标题】:Is StreamController and BehaviorSubject a Stream in Dart?StreamController 和 BehaviorSubject 是 Dart 中的流吗?
【发布时间】:2019-08-27 15:27:32
【问题描述】:

我使用 StreamBuilder、StreamController、BehaviorSubject、Stream 等已经有一段时间了。但我仍然对一些定义感到困惑。尤其是这个问题,StreamController 和 BehaviorSubject 是 Dart 中的 Stream 吗?

之所以有这个问题,是因为我在网上可以找到以下的词/语录:

  • BehaviorSubject 是一个特殊的 StreamController...(来自the API doc
  • Observable 是一个扩展 Stream 的包装类。 (Observable 是一个流)
  • BehaviorSubject 扩展了 Subject (BehaviorSubject 是一个 Subject)
  • Subject 扩展 Observable(Subject 是一个 Observable)

从在线文档的上述 4 点来看,它给了我: BehaviorSubject 是一个 Observable,然后是一个 Stream。所以 BehaviorSubject 是一个流。并且 BehaviorSubject 也是一个 StreamController。因此 StreamController 是一个 Stream。

但是如果 StreamController 是一个 Stream,这将与其他一些文章相矛盾,即 Stream 实际上是 StreamController 的一部分,并且您从 StreamController.stream 中获取 Stream。

如果我们谈论 Sink,就会更加混乱。

StreamController 实现 StreamSink。所以 Sink 是一个特殊的 StreamController。

所以从以上所有的话,我有点得到以下结果:

BehaviorSubject = StreamController = Observable = Stream = Sink

到最后,一切都是一样的……我疯了吗?

已编辑:(我现在明白了。希望它是正确的)

为了澄清我的困惑,我想我必须理解"BehaviorSubject is a special StreamController"这句话。

通过谷歌搜索和检查一些 sdk 代码,我想我理解 BehaviorSubject 是一个特殊的 StreamController,但反之则不然。这将解决我的困惑。 BehaviorSubject 扩展了 Subject,Subject 实现了 StreamController。因此"BehaviorSubject is a special StreamController" 是正确的。但我不能说 StreamController 是一个 BehaviorSubject。因此,即使 BehaviorSubject 实际上是 Stream,我也不能说 StreamController 是 Stream。

我希望我上面的理解是正确的。

【问题讨论】:

    标签: dart flutter


    【解决方案1】:

    StreamControllerStreamController
    它不扩展任何东西。所以它不是ObservableStreamBehaviorSubjectSink 中的任何一个。

    它确实实现 Sink 如您所说,因此允许您直接在其上添加数据,即使用streamController.addstreamController.sink.add。然后将此数据传递到每个控制器携带的Stream

    BehaviorSubject 实际上并不是标准库的一部分,只是对来自rxdart 的流的一个花哨的补充。它允许您随时直接访问最新值。

    【讨论】:

      【解决方案2】:

      一点也不疯狂,流就像一个管道,将数据作为接收器接收并作为流返回,而 StreamController 只是用于控制流。我希望这会有所帮助

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-10-18
        • 1970-01-01
        • 2020-09-02
        • 2019-04-20
        • 2020-08-25
        • 2022-12-19
        • 1970-01-01
        • 2021-07-20
        相关资源
        最近更新 更多