flutter Stream 有哪两种订阅模式。
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
属性可检查当前流的模式。