attachSink method

void attachSink(
  1. AnalyticsSink newSink
)

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