handleKeyEvent method
Handles keyboard events for navigation. Returns true if the event was handled.
Implementation
bool handleKeyEvent(KeyEvent event) {
if (event is! KeyDownEvent) return false;
switch (event.logicalKey) {
case LogicalKeyboardKey.arrowDown:
if (!_isOverlayVisible) {
showOverlay();
return true;
}
return moveToNextItem();
case LogicalKeyboardKey.arrowUp:
if (!_isOverlayVisible) {
showOverlay();
return true;
}
return moveToPreviousItem();
case LogicalKeyboardKey.enter:
if (hasItemFocus) {
selectFocusedItem();
return true;
}
return false;
case LogicalKeyboardKey.escape:
if (_isOverlayVisible) {
hideOverlay();
return true;
}
return false;
case LogicalKeyboardKey.home:
if (_isOverlayVisible && _itemCount > 0) {
moveToFirstItem();
return true;
}
return false;
case LogicalKeyboardKey.end:
if (_isOverlayVisible && _itemCount > 0) {
moveToLastItem();
return true;
}
return false;
case LogicalKeyboardKey.pageDown:
if (_isOverlayVisible && _itemCount > 0) {
// Move 5 items down or to the end
final newIndex = (_focusedIndex + 5).clamp(0, _itemCount - 1);
setFocusedIndex(newIndex);
return true;
}
return false;
case LogicalKeyboardKey.pageUp:
if (_isOverlayVisible && _itemCount > 0) {
// Move 5 items up or to the beginning
final newIndex = (_focusedIndex - 5).clamp(0, _itemCount - 1);
setFocusedIndex(newIndex);
return true;
}
return false;
default:
return false;
}
}