Конструктор 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.18.5/dart-async/Stream/Stream.eventTransformed.html