我已经使用StreamBuilder,StreamController,BehaviorSubject,Stream等了一段时间了。但我仍然对某些定义感到困惑。特别是对于这个问题,StreamController和BehaviorSubject是Dart中的一个流吗?
我有这个问题的原因是因为我可以在线找到以下单词/引号:
从以上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。
我希望我上面所理解的是正确的。
根本不是疯狂的,流就像一个管道,它将数据作为接收器并将其作为流返回,而StreamController仅用于控制流。我希望这是有帮助的
StreamController
是StreamController
。
它没有扩展任何东西。所以它不是Observable
,Stream
,BehaviorSubject
或Sink
中的任何一个。
它确实如你所说实现Sink
,因此允许你直接在其上添加数据,即使用streamController.add
以及streamController.sink.add
。然后将该数据传递到每个控制器携带的Stream
上。
BehaviorSubject
实际上并不是标准库的一部分,只是对来自rxdart
的流的奇特补充。它允许您直接访问最新的值。