StreamController<T> 构造函数
一个具有只支持单个订阅者的 stream 的控制器。
如果 sync
为 true,则返回的流控制器是一个 SynchronousStreamController,必须谨慎使用,并注意不要违反 Stream 协议。如有疑问,请使用非同步版本。
使用异步控制器永远不会产生错误行为,但使用同步控制器不正确可能会导致其他正确的程序崩溃。
同步控制器仅用于优化事件传播,当异步事件立即触发另一个事件时。除非保证在不会破坏 Stream
不变性的地方调用 add 或 addError,否则不应使用它。
仅使用同步控制器来转发(可能已转换)来自另一个流或未来的事件。
Stream 应在订阅者开始监听之前保持惰性(使用 onListen
回调开始产生事件)。Stream 不应在没有用户监听流的情况下泄漏资源(如 websockets)。
控制器将所有传入事件缓冲,直到注册了订阅者,但此功能仅在罕见情况下使用。
当流暂停时调用 onPause
函数。当流恢复时调用 onResume
。
当流收到其监听器时调用 onListen
回调,当监听器结束订阅时调用 onCancel
。如果 onCancel
需要执行异步操作,则 onCancel
应返回一个在取消操作完成后完成的未来。
如果在控制器需要数据之前流被取消,则可能不会执行 onResume
调用。
实现
factory StreamController(
{void onListen()?,
void onPause()?,
void onResume()?,
FutureOr<void> onCancel()?,
bool sync = false}) {
return sync
? _SyncStreamController<T>(onListen, onPause, onResume, onCancel)
: _AsyncStreamController<T>(onListen, onPause, onResume, onCancel);
}