我已经使用StreamBuilder,StreamController,BehaviorSubject,Stream等。但是我仍然对某些定义感到困惑。尤其是对于这个问题,StreamController和BehaviorSubject是Dart中的Stream吗?
我有这个问题的原因是因为我可以在线找到以下单词/报价:
从在线文档的上述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是流。
我希望我上面的理解是正确的。
答案 0 :(得分:1)
一点也不疯狂,流就像一个管道,将数据作为接收器并作为流送回,而StreamController仅用于控制流。我希望这会有所帮助
答案 1 :(得分:1)
StreamController
是StreamController
。
它不会扩展任何内容。因此它不是Observable
,Stream
,BehaviorSubject
或Sink
中的任何一个。
它确实执行了您所说的实现 Sink
,因此可以直接在其上添加数据,即使用streamController.add
和streamController.sink.add
。然后,这些数据将传递到每个控制器携带的Stream
上。
BehaviorSubject
实际上不是标准库的一部分,而只是来自rxdart
的流的奇妙补充。它使您可以随时直接访问最新值。