tap method
Stream<E>
tap({
- Callback? onListen,
- Callback? onPause,
- Callback? onResume,
- DataCallback<
E> ? onData, - ErrorCallback? onError,
- Callback? onCancel,
- Callback? onDone,
Transparently perform side-effects on the events of a Stream, for things such as logging or debugging.
Implementation
Stream<E> tap({
Callback? onListen,
Callback? onPause,
Callback? onResume,
DataCallback<E>? onData,
ErrorCallback? onError,
Callback? onCancel,
Callback? onDone,
}) {
final controller =
isBroadcast ? StreamController<E>.broadcast() : StreamController<E>();
late StreamSubscription<E> subscription;
void dispatchOnData(E element) {
onData?.call(element);
controller.add(element);
}
void dispatchOnError(Object error, [StackTrace? stackTrace]) {
onError?.call(error, stackTrace);
controller.addError(error, stackTrace);
subscription.cancel();
}
void dispatchOnDone() {
onDone?.call();
controller.close();
subscription.cancel();
}
controller.onListen = () {
onListen?.call();
subscription = listen(dispatchOnData,
onError: dispatchOnError, onDone: dispatchOnDone);
};
controller.onPause = () {
onPause?.call();
subscription.pause();
};
controller.onResume = () {
onResume?.call();
subscription.resume();
};
controller.onCancel = () async {
onCancel?.call();
await subscription.cancel();
};
return controller.stream;
}