StreamController<T> 构造函数
一个控制器,仅支持单个订阅者的 流。
如果 sync
为 true,返回的流控制器是一个 SynchronousStreamController,必须在符合 流 合约的精心关照和注意下使用。如果有疑问,请使用非同步版本。
使用异步控制器永远不会给出错误的行为,但使用同步控制器错误可能会导致本来正确的程序崩溃。
同步控制器仅适用于在单个异步事件触发另一个事件时优化事件传播。除非在确保不会违反 Stream
不变的 add 或 addError 调用的位置,否则不应使用。
仅使用同步控制器将(潜在转换过的)事件从另一个流或未来传递。
流应在有订阅者开始监听之前保持静止(使用 onListen
回调启动事件生产)。当没有用户监听流时,流不应泄露资源(如 WebSocket)。
控制器会在有订阅者注册前缓冲所有传入的事件,但这仅应在罕见情况下使用。
当流暂停时,将调用 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);
}