handleKeyEvent method

void handleKeyEvent(
  1. KeyEvent event
)

Routes a key event to the focused field, handling tab navigation.

Implementation

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

  final list = _fields.toList();
  var activeIdx = list.indexWhere((fs) => fs.widget.focused);
  if (activeIdx == -1) activeIdx = 0;

  if (event.key == 'tab' || event.key == '\t') {
    setState(() {
      list[activeIdx].widget.focused = false;
      activeIdx = (activeIdx + 1) % list.length;
      list[activeIdx].widget.focused = true;
    });
  } else if (event.key == 'backtab') {
    setState(() {
      list[activeIdx].widget.focused = false;
      activeIdx = (activeIdx - 1 + list.length) % list.length;
      list[activeIdx].widget.focused = true;
    });
  } else if (event.type == KeyType.enter) {
    final currentField = list[activeIdx].widget;
    currentField.validate();
    if (currentField is! TextAreaFormField) {
      setState(() {
        currentField.focused = false;
        activeIdx = (activeIdx + 1) % list.length;
        list[activeIdx].widget.focused = true;
      });
    } else {
      list[activeIdx].widget.handleKeyEvent(event);
      list[activeIdx].setState(() {});
    }
  } else {
    list[activeIdx].widget.handleKeyEvent(event);
    list[activeIdx].setState(() {});
  }
}