track static method
Tracks an event occurrence.
For count-based triggers, this method should be called each time the event occurs. It will trigger the event when the count reaches the configured threshold.
This method also handles:
- End time checks
- Maximum recurrence checks
- Count-based recurrence
Returns a Future that completes when the tracking is done.
Implementation
static Future<void> track(String eventKey) async {
final config = _configs[eventKey];
if (config == null) return;
if (config.endTime != null && DateTime.now().isAfter(config.endTime!)) {
config.onStateUpdate?.call(false);
return;
}
await _eventCounter.incrementCounter(eventKey);
final count = await _eventCounter.getCounter(eventKey);
final recurrenceCount = await _eventCounter.getRecurrenceCounter(eventKey);
if (config.maxRecurrences != null &&
recurrenceCount >= config.maxRecurrences! + 1) {
config.onStateUpdate?.call(false);
return;
}
if (config.triggerType == TriggerType.count &&
count >= config.triggerCount! &&
recurrenceCount == 0) {
_triggerEvent(config, isRecurrence: false);
return;
}
if (config.triggerType == TriggerType.time &&
DateTime.now().isAfter(config.triggerTime!) &&
recurrenceCount == 0) {
_triggerEvent(config, isRecurrence: false);
return;
}
if (config.recurrenceType == RecurrenceType.count && recurrenceCount > 0) {
if (config.maxRecurrences != null &&
recurrenceCount >= config.maxRecurrences! + 1) {
config.onStateUpdate?.call(false);
return;
}
final remainingCount = count - config.triggerCount!;
if (remainingCount > 0 && remainingCount % config.recurrenceCount! == 0) {
_triggerEvent(config, isRecurrence: true);
}
}
}