trackEvent method
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);
}
}