broadcast method

void broadcast(
  1. WidgetModel source,
  2. Event event
)

Notifies listeners about an Event

Implementation

void broadcast(WidgetModel source, Event event) {
  /* Already Processed? */
  if (!event.functions.contains(this)) {
    // Mark as Processed
    event.functions.add(this);

    // Notify Listeners
    List<OnEventCallback>? callbacks;
    if (listeners.containsKey(event.type)) callbacks = listeners[event.type];
    if (callbacks != null) {
      for (var callback in callbacks) {
        if (!event.handled) {
          callback(event);
        }
      }
    }

    // Notify Child Event Managers
    if (!event.handled) {
      List<IEventManager> children = _childrenOf(source);
      for (IEventManager child in children) {
        if (event.handled) break;
        child.broadcastEvent(child as WidgetModel, event);
      }
    }

    // Notify Parent Event Manager
    if (!event.handled && event.bubbles) {
      IEventManager? parent = _parentOf(source);
      if (parent != null) parent.broadcastEvent(parent as WidgetModel, event);
    }
  }
}