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