trackEvent method

Future<void> trackEvent(
  1. String eventName, {
  2. Map<String, Object?> properties = const {},
  3. double? value,
  4. String? currency,
})

Records an event the app performed, such as a purchase.

Queued and sent in batches alongside campaign analytics; never blocks. The name and properties are also evaluated against Digia-owned rules.

Implementation

Future<void> trackEvent(
  String eventName, {
  Map<String, Object?> properties = const {},
  double? value,
  String? currency,
}) async {
  if (!_initialized) {
    _log.e('trackEvent() ignored — called before initialize()');
    return;
  }
  _log.d('trackEvent (name=$eventName, '
      'properties=${properties.keys.join(',')})');
  final signal = EventSignal(eventName, properties);
  // Before the enqueue, so a wait cannot end while this event is in flight.
  _cancelWaits(signal);
  // Started first, so the event is queued before anything a rule emits. The
  // rules do not wait for the queue write or a batch flush.
  final tracked = _services?.analyticsService.trackAppEvent(
    eventName,
    properties: properties,
    value: value,
    currency: currency,
  );
  _evaluateRules(signal, waitsCancelled: true);
  try {
    await tracked;
  } catch (error) {
    _log.e('trackEvent() analytics failed — continuing', error: error);
  }
}