handleKeyEvent method

void handleKeyEvent(
  1. KeyEvent event
)

Moves focus between fields using Tab/Shift-Tab, and routes other events to the active field.

Implementation

void handleKeyEvent(KeyEvent event) {
  if (_state != null) {
    _state!.handleKeyEvent(event);
    return;
  }
  if (fields.isEmpty) return;

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