handleKeyEvent method
Handles incoming key events for navigation and selection.
Implementation
@override
bool handleKeyEvent(term.KeyEvent event) {
if (_flatNodes.isEmpty) return false;
if (event.type == KeyType.up) {
_selectedIndex = (_selectedIndex - 1).clamp(0, _flatNodes.length - 1);
return true;
} else if (event.type == KeyType.down) {
_selectedIndex = (_selectedIndex + 1).clamp(0, _flatNodes.length - 1);
return true;
} else if (event.type == KeyType.right) {
final flat = _flatNodes[_selectedIndex];
if (!flat.node.isLeaf) {
if (!flat.node.isExpanded) {
flat.node.isExpanded = true;
_updateFlatNodes();
} else {
if (_selectedIndex < _flatNodes.length - 1) {
_selectedIndex++;
}
}
}
return true;
} else if (event.type == KeyType.left) {
final flat = _flatNodes[_selectedIndex];
if (!flat.node.isLeaf && flat.node.isExpanded) {
flat.node.isExpanded = false;
_updateFlatNodes();
} else {
final parent = flat.node.parent;
if (parent != null) {
final parentIdx = _flatNodes.indexWhere((f) => f.node == parent);
if (parentIdx != -1) {
_selectedIndex = parentIdx;
}
}
}
return true;
} else if (event.key == ' ' || event.type == KeyType.enter) {
if (onSelect != null) {
onSelect!(_flatNodes[_selectedIndex].node);
}
return true;
}
return false;
}