簡體   English   中英

StreamController 和 BehaviorSubject 是 Dart 中的流嗎?

[英]Is StreamController and BehaviorSubject a Stream in Dart?

我使用 StreamBuilder、StreamController、BehaviorSubject、Stream 等已經有一段時間了。 但我仍然對一些定義感到困惑。 尤其是這個問題,StreamController 和 BehaviorSubject 是 Dart 中的 Stream 嗎?

我之所以有這個問題是因為我可以在網上找到以下單詞/語錄:

  • BehaviorSubject 是一個特殊的 StreamController...(來自API 文檔
  • Observable 是一個擴展 Stream 的包裝類。 (Observable 是一個流)
  • BehaviorSubject 擴展主題(BehaviorSubject 是一個主題)
  • Subject 擴展了 Observable (Subject 是一個 Observable)

從在線文檔的上述 4 點來看,它給了我: BehaviorSubject 是一個 Observable,然后是一個 Stream。 所以 BehaviorSubject 是一個流。 並且 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。

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

StreamControllerStreamController
它不擴展任何東西。 所以它不是ObservableStreamBehaviorSubjectSink中的任何一個。

如您所說,它確實實現Sink ,因此允許您直接在其上添加數據,即使用streamController.addstreamController.sink.add 然后將此數據傳遞到每個控制器攜帶的Stream上。

BehaviorSubject實際上並不是標准庫的一部分,只是對來自rxdart的流的一個花哨的補充。 它允許您隨時直接訪問最新值。

一點也不瘋狂,流就像一個管道,將數據作為接收器接收並作為流返回,而 StreamController 只是用於控制流。 我希望這是有幫助的

Observable類在rxdart 0.23.1中已棄用

Observable可以被Stream替換

rxdart 更改日志

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM