dispatchEvent method
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;
}