Конструктор 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);
}
© 2012 the Dart project authors
Licensed under the BSD 3-Clause "New" or "Revised" License.
https://api.dart.dev/stable/2.19.6/dart-async/Stream/Stream.eventTransformed.html