Spec-Zone.ru › Dart 2

dart:async

Конструктор 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);
}

© 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

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API