handleKeyEvent method

  1. @override
bool handleKeyEvent(
  1. KeyEvent event
)
override

Handles key events routed to this renderer. Returns true if handled.

Implementation

@override
bool handleKeyEvent(term.KeyEvent event) {
  Tracer.record(
    _traceKeyEventId,
    Phase.begin,
    TraceCategory.events,
    metadata: {'key': event.logicalKey},
  );
  try {
    final completer = _completer;
    if (completer == null || completer.isCompleted) return false;

    var isDone = false;
    final rootElement = _rootElement;
    if (rootElement == null) return false;

    // Step 0: Debug Overlay Toggle
    if (debugToggleKey != null && event == debugToggleKey) {
      debugShowTouchesEnabled = !debugShowTouchesEnabled;
      debugPaintHoverEnabled = !debugPaintHoverEnabled;
      debugMouseCursorEnabled = !debugMouseCursorEnabled;
      debugPaintLayerBordersEnabled = !debugPaintLayerBordersEnabled;

      if (mode == ExecutionMode.standalone) {
        if (debugPaintHoverEnabled) {
          terminal.enableMouseTracking();
        } else {
          terminal.disableMouseTracking();
        }
      }

      _scheduleRender();
      return true;
    }

    // Step 1: Custom Interceptor
    if (onKeyEvent != null) {
      isDone = onKeyEvent!(event);
    }

    // Step 2: Widget Event Routing
    if (!isDone) {
      isDone = _routeKeyEvent(rootElement, event);
    }

    // Step 3: Standard & System Exit Evaluation
    if (!isDone) {
      if (_detectTrigger(event) case final trigger?) {
        if (exitConditions.containsKey(trigger)) {
          _handleAction(trigger, event);
          return true;
        }
      }
    }

    if (isDone) {
      rootElement.markNeedsBuild();
    }
    return isDone;
  } finally {
    Tracer.record(_traceKeyEventId, Phase.end, TraceCategory.events);
  }
}