enqueueScreenEvent method

void enqueueScreenEvent(
  1. ScreenEvent event
)

Implementation

void enqueueScreenEvent(ScreenEvent event) {
  if (event.type == ScreenEventType.onScreen) {
    // If we're enqueuing an onScreen event, remove any pending offScreen events.
    _screenEventQueue.removeWhere((e) => e.type == ScreenEventType.offScreen);

    // De-dupe onscreen: an element may be mounted/rebuilt multiple times while
    // remaining visible (e.g. style-driven rebuilds). Tests and framework code
    // expect `onscreen` to be a one-shot notification per visible lifecycle.
    if (_isOnScreen) return;
    _screenEventQueue.removeWhere((e) => e.type == ScreenEventType.onScreen);
  } else if (event.type == ScreenEventType.offScreen) {
    // If we're enqueuing an offScreen event, remove any pending onScreen events.
    _screenEventQueue.removeWhere((e) => e.type == ScreenEventType.onScreen);
    if (!_isOnScreen) return;
    _screenEventQueue.removeWhere((e) => e.type == ScreenEventType.offScreen);
  }

  _screenEventQueue.add(event);
  _processEventQueue();
}