handleKeyEvent method

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

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;
}