我已经使用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 = StreamController =可观察= Stream =接收器
最后,一切都是一样的...我疯了吗?
编辑:(我现在了解。希望它是正确的)
为了澄清我的困惑,我认为我必须理解
"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
。
它不会扩展任何内容。因此它不是Observable
,Stream
,BehaviorSubject
或Sink
中的任何一个。
它确实按照您所说的实现 Sink
,因此允许您直接在其上添加数据,即使用streamController.add
和streamController.sink.add
。然后,此数据将传递到每个 Controller 携带的Stream
上。BehaviorSubject
实际上不是标准库的一部分,而只是 rxdart
流中的精美添加。它使您可以随时直接访问最新值。