Spec-Zone.ru › Dart 2

dart:async

Преобразователь потоков<S, T>.Конструктор fromHandlers

StreamTransformer<S, T>.fromHandlers(
  1. {void handleData(
    1. S данные,
    2. EventSink<T> поток
    )?,
  2. void handleError(
    1. Объект ошибка,
    2. StackTrace стек вызовов,
    3. EventSink<T> поток
    )?,
  3. void handleDone(
    1. EventSink<T> поток
    )?}
)

Создаёт StreamTransformer, который делегирует события указанным функциям.

Пример использования дублирующего преобразователя:

stringStream.transform(StreamTransformer<String, String>.fromHandlers(
    handleData: (String value, EventSink<String> sink) {
      sink.add(value);
      sink.add(value);  // Duplicate the incoming events.
    }));

Преобразователи, созданные таким образом, не могут использовать захваченное состояние, если они используются в потоках, которые могут прослушиваться несколько раз.

StreamController<String> controller = StreamController.broadcast();
controller.onListen = () {
  scheduleMicrotask(() {
    controller.addError("Bad");
    controller.addError("Worse");
    controller.addError("Worst");
  });
};
var sharedState = 0;
var transformedStream = controller.stream.transform(
    StreamTransformer<String>.fromHandlers(
        handleError: (error, stackTrace, sink) {
  sharedState++; // Increment shared error-counter.
  sink.add("Error $sharedState: $error");
}));

transformedStream.listen(print);
transformedStream.listen(print); // Listen twice.
// Listening twice to the same stream makes the transformer share the same
// state. Instead of having "Error 1: Bad", "Error 2: Worse",
// "Error 3: Worst" as output (each twice for the separate subscriptions),
// this program emits:
// Error 1: Bad
// Error 2: Bad
// Error 3: Worse
// Error 4: Worse
// Error 5: Worst
// Error 6: Worst

Реализация

factory StreamTransformer.fromHandlers(
    {void handleData(S data, EventSink<T> sink)?,
    void handleError(Object error, StackTrace stackTrace, EventSink<T> sink)?,
    void handleDone(EventSink<T> sink)?}) = _StreamHandlerTransformer<S, T>;

© 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/StreamTransformer/StreamTransformer.fromHandlers.html

Spec-Zone.ru

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