report method

Future<Exception?> report({
  1. Object? err,
  2. StackTrace? trace,
})

Implementation

Future<Exception?> report({Object? err, StackTrace? trace}) async {
  if (disabled) {
    return null;
  }
  if (err == null) {
    return Exception('no error to report');
  }

  String? errorMessage;
  StackTrace? stackTrace;

  if (err is String) {
    errorMessage = err;
    stackTrace = trace ?? StackTrace.current;
  } else if (err is FlutterErrorDetails) {
    errorMessage = err.exception.toString();
    stackTrace = err.stack;
  } else if (err is Exception) {
    errorMessage = err.toString();
    stackTrace = trace ?? StackTrace.current;
  } else if (err is Error) {
    errorMessage = err.toString();
    stackTrace = err.stackTrace;
  }

  var reportUrl =
      targetUrl ?? '$baseAPIUrl$projectId/events:report?key=$apiKey';

  var customFunc = customReportingFunction;

  Payload payload = Payload(
    serviceContext: serviceContext,
    context: ErrorContext(
      user: context?.user ?? "",
    ),
  );
  final message =
      await resolveError(errorMessage: errorMessage, stackTrace: stackTrace);
  payload.message = message;

  if (customFunc != null) {
    return customFunc(payload);
  }

  return sendErrorPayload(reportUrl, payload);
}