handleKeyEvent method

void handleKeyEvent(
  1. KeyEvent event
)

Handles incoming key events for navigation and selection.

Implementation

void handleKeyEvent(KeyEvent event) {
  if (_flatNodes.isEmpty) return;

  if (event.type == KeyType.up) {
    _selectedIndex = (_selectedIndex - 1).clamp(0, _flatNodes.length - 1);
  } else if (event.type == KeyType.down) {
    _selectedIndex = (_selectedIndex + 1).clamp(0, _flatNodes.length - 1);
  } 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++;
        }
      }
    }
  } 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;
        }
      }
    }
  } else if (event.key == ' ' || event.type == KeyType.enter) {
    if (onSelect != null) {
      onSelect!(_flatNodes[_selectedIndex].node);
    }
  }
}