createEvent method

Future<ReportEvent> createEvent(
  1. BaseException exception, {
  2. Map<String, dynamic> additionalContext = const {},
  3. bool manual = false,
  4. bool handled = true,
})

Creates a ReportEvent from a BaseException, collecting and merging contexts, applying transforms and sanitizers, and returning a sanitized event ready for delivery.

If manual is true, manual-only context providers are included.

Implementation

Future<ReportEvent> createEvent(
  BaseException exception, {
  Map<String, dynamic> additionalContext = const {},
  bool manual = false,
  bool handled = true,
}) async {
  final cfg = _ensureConfig();

  final baseCtx = await _collectContext(
    base: cfg.baseProviders,
    additional: [
      ...cfg.additionalProviders,
      ..._dynamicProviders,
    ],
    includeManualOnly: manual,
  );

  final rawEvent = ReportEvent(
    id: ReportEvent.generateId(),
    exception: exception,
    context: {
      'environment': cfg.environment,
      'handled': handled,
      ...baseCtx,
      if (additionalContext.isNotEmpty) ...additionalContext,
    },
    timestamp: DateTime.now(),
    breadcrumbs: List.unmodifiable(_breadcrumbs),
    fingerprints: _computeFingerprints(exception),
    handled: handled,
  );

  // Apply transforms (e.g., tagging, rewriting) then sanitizers to produce a safe payload.
  final transformed = cfg.applyTransforms(rawEvent);
  final sanitizedPayload = cfg.sanitize(transformed);

  // Embed the sanitized payload for downstream reporters and outbox persistence.
  return transformed.withPayload(sanitizedPayload);
}