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