once<E> method

void once<E>(
  1. FutureOr<void> then(
    1. E
    ), {
  2. bool filter(
    1. E
    )?,
})

convenience method to listen & filter a specific event type, just once.

Implementation

void once<E>(
  FutureOr<void> Function(E) then, {
  bool Function(E)? filter,
}) {
  CancelListenFunc? cancelFunc;
  cancelFunc = listen((event) async {
    // event must be E
    if (event is! E) return;
    // filter must be true (if filter is used)
    if (filter != null && !filter(event)) return;
    // cast to E
    await then(event);
    // cancel after 1 event
    cancelFunc?.call();
  });
}