toMap property

Map<String, void Function(Event)> get toMap

Returns only the active event handlers for non-null callbacks.

Implementation

Map<String, void Function(Event)> get toMap {
  final map = <String, void Function(Event)>{};
  bool longPressConsumed = false;
  Timer? longPressTimer;

  void cancelLongPress({bool resetConsumed = false}) {
    longPressTimer?.cancel();
    longPressTimer = null;
    if (resetConsumed) longPressConsumed = false;
  }

  if (onClick != null) {
    map['click'] = (e) {
      if (longPressConsumed) {
        longPressConsumed = false;
        return;
      }
      onClick!.call(e);
    };
  }

  if (onLongPress != null) {
    map['pointerdown'] = (e) {
      cancelLongPress(resetConsumed: true);

      final event = e as PointerEvent;
      onPointerDown?.call(event);

      longPressTimer = Timer(longPressDuration, () {
        longPressConsumed = true;
        onLongPress!.call(event);
      });
    };

    map['pointerup'] = (e) {
      cancelLongPress();
      onPointerUp?.call(e as PointerEvent);
    };

    map['pointercancel'] = (e) {
      cancelLongPress(resetConsumed: true);
      onPointerCancel?.call(e as PointerEvent);
    };
  } else {
    if (onPointerDown != null) {
      map['pointerdown'] = (e) => onPointerDown!(e as PointerEvent);
    }

    if (onPointerUp != null) {
      map['pointerup'] = (e) => onPointerUp!(e as PointerEvent);
    }

    if (onPointerCancel != null) {
      map['pointercancel'] = (e) => onPointerCancel!(e as PointerEvent);
    }
  }

  if (onDoubleClick != null) {
    map['dblclick'] = (e) => onDoubleClick!(e as MouseEvent);
  }

  if (onPointerEnter != null) {
    map['pointerenter'] = (e) => onPointerEnter!(e as PointerEvent);
  }

  if (onPointerLeave != null) {
    map['pointerleave'] = (e) {
      if (onLongPress != null) cancelLongPress(resetConsumed: true);
      onPointerLeave!(e as PointerEvent);
    };
  } else if (onLongPress != null) {
    map['pointerleave'] = (_) => cancelLongPress(resetConsumed: true);
  }

  if (onPointerMove != null) {
    map['pointermove'] = (e) => onPointerMove!(e as PointerEvent);
  }

  if (onPointerOver != null) {
    map['pointerover'] = (e) => onPointerOver!(e as PointerEvent);
  }

  if (onPointerOut != null) {
    map['pointerout'] = (e) => onPointerOut!(e as PointerEvent);
  }

  if (onInput != null) map['input'] = (e) => onInput!(e);

  if (onChange != null) map['change'] = (e) => onChange!(e);

  if (onMouseDown != null) {
    map['mousedown'] = (e) => onMouseDown!(e as MouseEvent);
  }

  if (onMouseUp != null) {
    map['mouseup'] = (e) => onMouseUp!(e as MouseEvent);
  }

  if (onMouseEnter != null) {
    map['mouseenter'] = (e) => onMouseEnter!(e as MouseEvent);
  }

  if (onMouseLeave != null) {
    map['mouseleave'] = (e) => onMouseLeave!(e as MouseEvent);
  }

  if (onMouseMove != null) {
    map['mousemove'] = (e) => onMouseMove!(e as MouseEvent);
  }

  if (onKeyDown != null) {
    map['keydown'] = (e) => onKeyDown!(e as KeyboardEvent);
  }

  if (onKeyUp != null) {
    map['keyup'] = (e) => onKeyUp!(e as KeyboardEvent);
  }

  if (onDrag != null) {
    map['drag'] = (e) => onDrag!(e as DragEvent);
  }

  if (onDragEnd != null) {
    map['dragend'] = (e) => onDragEnd!(e as DragEvent);
  }

  if (onDragEnter != null) {
    map['dragenter'] = (e) => onDragEnter!(e as DragEvent);
  }

  if (onDragLeave != null) {
    map['dragleave'] = (e) => onDragLeave!(e as DragEvent);
  }

  if (onDragOver != null) {
    map['dragover'] = (e) => onDragOver!(e as DragEvent);
  }

  if (onDragStart != null) {
    map['dragstart'] = (e) => onDragStart!(e as DragEvent);
  }

  if (onFocus != null) {
    map['focus'] = (e) => onFocus!(e as FocusEvent);
  }

  if (onFocusIn != null) {
    map['focusin'] = (e) => onFocusIn!(e as FocusEvent);
  }

  if (onFocusOut != null) {
    map['focusout'] = (e) => onFocusOut!(e as FocusEvent);
  }

  if (onBlur != null) {
    map['blur'] = (e) => onBlur!(e as FocusEvent);
  }

  if (onSelect != null) {
    map['select'] = (e) => onSelect!(e);
  }

  if (onInvalid != null) {
    map['invalid'] = (e) => onInvalid!(e);
  }

  if (onPaste != null) {
    map['paste'] = (e) => onPaste!(e as ClipboardEvent);
  }

  if (onSubmit != null) {
    map['submit'] = (e) => onSubmit!(e);
  }

  return map;
}