runCatching<R> method

FutureOr<R?> runCatching<R>(
  1. FutureOr<R> block(), {
  2. FutureOr<R?> onSuccess(
    1. R data
    )?,
  3. FutureOr<R?> onFailure(
    1. Object e,
    2. StackTrace s
    )?,
  4. dynamic ignoreSkipError = true,
})
inherited

ignoreSkipError true: SkipError will not trigger onFailure when true

Implementation

FutureOr<R?> runCatching<R>(
  FutureOr<R> Function() block, {
  FutureOr<R?> Function(R data)? onSuccess,
  FutureOr<R?> Function(Object e, StackTrace s)? onFailure,
  ignoreSkipError = true,
}) async {
  try {
    final data = block();
    return data is Future<R>
        ? await data.then((e) => (onSuccess ?? (r) => r).call(e))
        : (onSuccess ?? (r) => r).call(data);
  } catch (e, s) {
    if (ignoreSkipError && e is SkipError) return null;
    return onFailure?.call(e, s);
  }
}