handleKeyEvent method
Handles a keyboard event, returning true if the event was consumed.
Implementation
@override
bool handleKeyEvent(term.KeyEvent event) {
final nodes = flatNodes;
if (nodes.isEmpty) return false;
bool handled = false;
if (event.type == KeyType.up) {
selectedIndex = selectedIndex - 1;
handled = true;
} else if (event.type == KeyType.down) {
selectedIndex = selectedIndex + 1;
handled = true;
} else if (event.type == KeyType.right) {
final flat = nodes[selectedIndex];
if (!flat.node.isLeaf) {
if (!flat.node.isExpanded) {
flat.node.isExpanded = true;
updateFlatNodes();
} else {
if (selectedIndex < nodes.length - 1) {
selectedIndex = selectedIndex + 1;
}
}
}
handled = true;
} else if (event.type == KeyType.left) {
final flat = nodes[selectedIndex];
if (!flat.node.isLeaf && flat.node.isExpanded) {
flat.node.isExpanded = false;
updateFlatNodes();
} else {
// Move to parent
final parent = flat.node.parent;
if (parent != null) {
final parentIdx = nodes.indexWhere((f) => f.node == parent);
if (parentIdx != -1) {
selectedIndex = parentIdx;
}
}
}
handled = true;
} else if (event.key == ' ' || event.type == KeyType.enter) {
if (widget.onSelect != null) {
widget.onSelect!(nodes[selectedIndex].node);
}
handled = true;
}
if (handled) {
setState(() {});
}
return handled;
}