Конструктор-фабрика Stream.eventTransformed
Stream.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 implements StreamTransformer<String, String> {
// Some generic types ommitted for brevety.
Stream bind(Stream stream) => new Stream<String>.eventTransformed(
stream,
(EventSink sink) => new DuplicationSink(sink));
}
stringStream.transform(new DuplicationTransformer());
Возвращаемый поток является потоком широковещательной передачи, если source таковым является.
Источник
factory Stream.eventTransformed(
Stream source, EventSink mapSink(EventSink<T> sink)) {
return new _BoundSinkStream(source, mapSink);
}
© 2012 the Dart project authors
Licensed under the Creative Commons Attribution-ShareAlike License v4.0.
https://api.dartlang.org/stable/1.24.3/dart-async/Stream/Stream.eventTransformed.html