StreamController和BehaviorSubject是Dart中的流吗?

时间:2019-04-05 16:58:55

标签: dart flutter

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

我有这个问题的原因是因为我可以在线找到以下单词/报价:

  • BehaviorSubject是一个特殊的StreamController ...(来自the API doc
  • Observable是一个包装类,用于扩展Stream。 (可观察到的是一个流)
  • BehaviorSubject扩展了主题(BehaviorSubject是一个主题)
  • 主题扩展了可观察的(主题是可观察的)

从在线文档的上述4点中,我得到了: BehaviorSubject是一个Observable,然后是一个Stream。所以BehaviorSubject是一个Stream。而且BehaviorSubject也是StreamController。因此,StreamController是一个Stream。

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

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

StreamController实现StreamSink。因此,接收器是一种特殊的StreamController。

因此,从以上所有单词中,我都能得到以下结果:

BehaviorSubject =流控制器=可观察=流=接收器

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

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

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

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

StreamControllerStreamController
它不会扩展任何内容。因此它不是ObservableStreamBehaviorSubjectSink中的任何一个。

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

BehaviorSubject实际上不是标准库的一部分,而只是来自rxdart的流的奇妙补充。它使您可以随时直接访问最新值。