Stream<T>.eventTransformed 构造函数
创建一个流,其中所有来自现有流的事件都通过一个接收器转换。
当监听返回的流时,将调用给定的 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);
}