dispatchEvent method

bool dispatchEvent(
  1. Event event
)

Implementation

bool dispatchEvent(Event event) {
  if (event._eventPhase != Event._INITIAL_PHASE) {
    throw ArgumentError('Event.eventPhase is not Event._INITIAL_PHASE');
  }
  event._eventPhase = Event.AT_TARGET;
  event.internalSetTarget(this);

  // Capturing phase
  event._eventPhase = Event.CAPTURING_PHASE;
  _invokeCapturingListeners(event);

  // Was the event stopped?
  if (event._stoppedPropagation) {
    return event._defaultPrevented;
  }

  // Bubbling phase
  if (event.bubbles ?? true) {
    event._eventPhase = Event.BUBBLING_PHASE;
    _invokeBubblingListeners(event);
  }

  // Invoke default behavior
  if (!event._defaultPrevented) {
    Window? usedWindow;
    final self = this;
    if (self is Node) {
      usedWindow = self.ownerDocument?.window;
    }
    // NOTE: If multiple controllers exist, we currently fall back to global window.
    usedWindow ??= window;

    // ignore: invalid_use_of_protected_member
    usedWindow.internalWindowController.windowBehavior.handleEventDefault(
      this,
      event,
    );
  }

  // Return
  return event._defaultPrevented;
}