attachSink method
Attach the analytics sink.
Queued events are drained asynchronously to avoid blocking startup. Idempotent: if a sink is already attached, this is a no-op.
Implementation
void attachSink(AnalyticsSink newSink) {
if (_sink != null) return;
_sink = newSink;
_hasSink.value = true;
if (_eventQueue.isNotEmpty) {
final queuedEvents = List<_QueuedEvent>.from(_eventQueue);
_eventQueue.clear();
Future.microtask(() {
for (final event in queuedEvents) {
if (event.isAsync) {
_sink!.logEventAsync(event.eventName, event.metadata);
} else {
_sink!.logEvent(event.eventName, event.metadata);
}
}
});
}
}