Преобразователь потоков< S, T>.Конструктор fromHandlers
- {void handleData(
- S данные,
-
EventSink<
T> поток
- void handleError(
- Объект ошибка,
- StackTrace стек вызовов,
-
EventSink<
T> поток
- void handleDone(
-
EventSink<
T> поток
-
EventSink<
Создаёт 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