Flutter 中的 Stream 有兩種訂閱模式:
?單訂閱模式 (Single Subscription)??
- 只能有一個訂閱者(
listen
?只能調用一次),后續調用會拋出異常。 - 數據僅在訂閱后開始傳遞,適用于點對點通信場景(如文件讀取流)。
- 默認創建的?
StreamController
?是單訂閱模式:
StreamController<String> controller = StreamController(); // 單訂閱
廣播模式 (Broadcast)??
- 允許多個訂閱者同時監聽,數據會實時分發給所有訂閱者。
- 適用于發布-訂閱場景(如全局事件總線)。
- 通過?
StreamController.broadcast()
?或轉換方法創建:
StreamController<String> controller = StreamController.broadcast(); // 廣播
// 或轉換現有流
Stream broadcastStream = singleStream.asBroadcastStream();
關鍵區別?:
- ?單訂閱?:數據緩存到訂閱時傳遞,類似“點對點”。
- ?廣播?:數據實時廣播,類似“群發消息”。
?注意事項?:
- 廣播流需手動管理資源(如?
cancel()
?和?close()
),避免內存泄漏。 - 使用?
isBroadcast
?屬性可檢查當前流的模式。