onComplete method

Future<T?> onComplete({
  1. required FutureOr<void> onSuccess(
    1. T? r
    ),
  2. FutureOr<void> onError(
    1. Object e,
    2. StackTrace s
    )?,
  3. FutureOr<void> onErrorOrNull(
    1. Object? e,
    2. StackTrace? s
    )?,
  4. AsyncExtensionErrorLogger? errorLogger,
  5. bool logError = true,
})

Calls onSuccess or onError when this Future completes. If onErrorOrNull is defined, calls onErrorOrNull if it completes with null or with an error.

Logs the error using errorLogger or defaultAsyncExtensionErrorLogger if parameter logError is true.

Implementation

Future<T?> onComplete({
  required FutureOr<void> Function(T? r) onSuccess,
  FutureOr<void> Function(Object e, StackTrace s)? onError,
  FutureOr<void> Function(Object? e, StackTrace? s)? onErrorOrNull,
  AsyncExtensionErrorLogger? errorLogger,
  bool logError = true,
}) async {
  try {
    var r = await this;

    if (r == null && onErrorOrNull != null) {
      await onErrorOrNull(null, null);
    } else {
      await onSuccess(r);
    }

    return r;
  } catch (e, s) {
    if (logError) errorLogger.logError(e, s);

    if (onErrorOrNull != null) {
      await onErrorOrNull(e, s);
    } else if (onError != null) {
      await onError(e, s);
    }

    return null;
  }
}