Stream<T>.eventTransformed 构造函数

Stream<T>.eventTransformed(
  1. Stream source,
  2. EventSink mapSink(
    1. EventSink<T> sink
    )
)

创建一个流,其中所有来自现有流的事件都通过一个接收器转换。

当监听返回的流时,将调用给定的 mapSink 闭包。所有来自 source 的事件都添加到调用时返回的事件接收器。转换将所有转换后的事件放入在调用期间接收到的 mapSink 闭包中的接收器。从概念上讲,mapSink 创建了一个转换管道,输入接收器是返回的 EventSink,输出接收器是它接收到的接收器。

此构造函数通常用于构建转换器。

用于复制转换器的示例用途

class DuplicationSink implements EventSink<String> {
  final EventSink<String> _outputSink;
  DuplicationSink(this._outputSink);

  void add(String data) {
    _outputSink.add(data);
    _outputSink.add(data);
  }

  void addError(e, [st]) { _outputSink.addError(e, st); }
  void close() { _outputSink.close(); }
}

class DuplicationTransformer extends StreamTransformerBase<String, String> {
  // Some generic types omitted for brevity.
  Stream bind(Stream stream) => Stream<String>.eventTransformed(
      stream,
      (EventSink sink) => DuplicationSink(sink));
}

stringStream.transform(DuplicationTransformer());

如果 source 是广播流,则结果流也是广播流。

实现

factory Stream.eventTransformed(
    Stream<dynamic> source, EventSink<dynamic> mapSink(EventSink<T> sink)) {
  return new _BoundSinkStream(source, mapSink);
}