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

我有这个问题的原因是因为我可以在网上找到以下单词/语录:

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

  • 从在线文档的上述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。

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

    最佳答案

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

    它确实按照您所说的实现 Sink,因此允许您直接在其上添加数据,即使用streamController.addstreamController.sink.add。然后,此数据将传递到每个 Controller 携带的Stream上。
    BehaviorSubject实际上不是标准库的一部分,而只是 rxdart 流中的精美添加。它使您可以随时直接访问最新值。

    10-01 21:26