eventMap property
Constructs the map of event handlers for the underlying DomComponent.
This method combines the convenient, strongly-typed event callbacks (like onClick)
with the flexible eventHandlers map into a single map that Jaspr can use.
Implementation
Map<String, EventCallback> get eventMap {
final eventMap = <String, EventCallback>{};
// Standard mouse events
if (onMouseEnter != null) {
eventMap['mouseenter'] = (dynamic rawEvent) => onMouseEnter!(rawEvent as MouseEvent);
}
if (onMouseLeave != null) {
eventMap['mouseleave'] = (dynamic rawEvent) => onMouseLeave!(rawEvent as MouseEvent);
}
if (onClick != null) {
eventMap['click'] = (dynamic rawEvent) => onClick!(rawEvent as MouseEvent);
}
// Standard keyboard events
if (onKeyDown != null) {
eventMap['keydown'] = (dynamic rawEvent) => onKeyDown!(rawEvent as KeyboardEvent);
}
if (onKeyUp != null) {
eventMap['keyup'] = (dynamic rawEvent) => onKeyUp!(rawEvent as KeyboardEvent);
}
// Standard input/change events
if (onInput != null) {
eventMap['input'] = (dynamic rawEvent) => onInput!(rawEvent as String);
}
if (onChange != null) {
eventMap['change'] = (dynamic rawEvent) => onChange!(rawEvent as String);
}
// Custom event handlers
if (eventHandlers != null && eventHandlers!.isNotEmpty) {
final eventEntries = eventHandlers!.entries;
for (final entry in eventEntries) {
final eventName = entry.key;
final handlers = entry.value;
eventMap[eventName] = (dynamic rawEvent) {
// Attempt to cast to a more specific event type based on common event names
// to provide better type safety for custom handlers.
final Event event;
switch (eventName) {
case 'click':
case 'mousedown':
case 'mouseup':
case 'mousemove':
case 'mouseenter':
case 'mouseleave':
event = rawEvent as MouseEvent;
case 'keydown':
case 'keyup':
case 'keypress':
event = rawEvent as KeyboardEvent;
case 'input':
case 'change':
// For input/change, Jaspr provides a String value. We wrap it in a generic Event
// to match the UiEventHandler signature, though handlers should be aware of this.
event = Event(rawEvent as String);
default:
event = rawEvent as Event;
}
for (final handler in handlers) {
handler(event);
}
};
}
}
return eventMap;
}