StreamController和BehaviorSubject是Dart中的流吗?

问题描述 投票:0回答:2

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

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

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

从以上4点来自在线文档,它给了我:BehaviorSubject是一个Observable,然后是一个Stream。所以BehaviorSubject是一个Stream。而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
2个回答
1
投票

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


1
投票

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

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

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

© www.soinside.com 2019 - 2024. All rights reserved.