繁体   English   中英

StreamController 和 BehaviorSubject 是 Dart 中的流吗?

[英]Is StreamController and BehaviorSubject a Stream in Dart?

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

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

  • BehaviorSubject 是一个特殊的 StreamController...(来自API 文档
  • Observable 是一个扩展 Stream 的包装类。 (Observable 是一个流)
  • BehaviorSubject 扩展主题(BehaviorSubject 是一个主题)
  • 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。

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

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

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

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

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

Observable类在rxdart 0.23.1中已弃用

Observable可以被Stream替换

rxdart 更改日志

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM