generateCleanup method

CleanupCallback? generateCleanup({
  1. CleanupCallback? cleanup,
  2. bool bubbleCancellation = true,
})

Helper method to generate a CleanupCallback

Implementation

CleanupCallback? generateCleanup({
  CleanupCallback? cleanup,
  bool bubbleCancellation = true,
}) {
  if (!bubbleCancellation) return cleanup;

  final parent = this;
  if (cleanup == null) return (_) => parent.cancel();

  return (acc) {
    if (parent.drained) return cleanup(acc);

    final futureOr = cleanup(acc);
    return futureOr is Future
        ? futureOr.whenComplete(parent.cancel)
        : parent.cancel();
  };
}