StreamController<T> 构造函数

StreamController<T>({
  1. void onListen()?,
  2. void onPause()?,
  3. void onResume()?,
  4. FutureOr<void> onCancel()?,
  5. bool sync = false,
})

一个具有只支持单个订阅者的 stream 的控制器。

如果 sync 为 true,则返回的流控制器是一个 SynchronousStreamController,必须谨慎使用,并注意不要违反 Stream 协议。如有疑问,请使用非同步版本。

使用异步控制器永远不会产生错误行为,但使用同步控制器不正确可能会导致其他正确的程序崩溃。

同步控制器仅用于优化事件传播,当异步事件立即触发另一个事件时。除非保证在不会破坏 Stream 不变性的地方调用 addaddError,否则不应使用它。

仅使用同步控制器来转发(可能已转换)来自另一个流或未来的事件。

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);
}