handleKeyEvent method
Routes a key event to the focused field, handling tab navigation.
Implementation
@override
bool handleKeyEvent(term.KeyEvent event) {
if (_fields.isEmpty) return false;
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;
});
return true;
} else if (event.key == 'backtab') {
setState(() {
list[activeIdx].widget.focused = false;
activeIdx = (activeIdx - 1 + list.length) % list.length;
list[activeIdx].widget.focused = true;
});
return 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 {
currentField.handleKeyEvent(event);
list[activeIdx].setState(() {});
}
return true;
} else {
list[activeIdx].widget.handleKeyEvent(event);
list[activeIdx].setState(() {});
return true;
}
}