capture<T> method

Future<T?> capture<T>(
  1. Future<T> action(), {
  2. required String category,
  3. bool fatal = false,
  4. String? message,
  5. Map<String, String>? metadata,
  6. FutureOr<void> onError(
    1. Object error,
    2. StackTrace stackTrace
    )?,
  7. FutureOr<void> onFinally()?,
  8. bool rethrowError = false,
})

Implementation

Future<T?> capture<T>(
  Future<T> Function() action, {
  required String category,
  bool fatal = false,
  String? message,
  Map<String, String>? metadata,
  FutureOr<void> Function(Object error, StackTrace stackTrace)? onError,
  FutureOr<void> Function()? onFinally,
  bool rethrowError = false,
}) async {
  try {
    return await action();
  } catch (error, stackTrace) {
    await report(
      error,
      stackTrace,
      category: category,
      fatal: fatal,
      message: message,
      metadata: metadata,
    );
    await onError?.call(error, stackTrace);
    if (rethrowError) {
      rethrow;
    }
    return null;
  } finally {
    await onFinally?.call();
  }
}