startSession static method
Implementation
static Future<void> startSession() async {
// Guard against concurrent calls — can happen when a lifecycle callback
// fires during an in-progress startSession() from SDK init. Without this
// guard, the session_number is double-incremented and a duplicate
// session_start event is recorded.
if (_startingSession) return;
_startingSession = true;
try {
await increaseSessionNumber();
final sessionTs = await _reservePendingSessionStart(
sessionNumber: getSessionNumber(),
lastEventTs: getLastEventTimestamp(),
);
await setCurrentSessionStart(sessionTs);
Event sessionStartEvent = await Event.createWithTimestamp(
'session_start',
sessionTs,
);
sessionStartEvent.addEventParams({'session_id': getCurrentSessionId()});
if (onRecordEvent != null) {
await onRecordEvent!(sessionStartEvent);
await _confirmPendingSessionStartStored(sessionTs);
}
} catch (e, st) {
dbLogger.severe('SessionHelper: startSession failed', e, st);
} finally {
_startingSession = false;
}
}