onKey method
Implementation
@override
bool onKey(KeyEvent event, RenderContext ctx) {
switch (event.key) {
case NamedKey.arrowUp:
_adjust(1);
return true;
case NamedKey.arrowDown:
_adjust(-1);
return true;
case NamedKey.arrowLeft:
_cycle(-1);
return true;
case NamedKey.arrowRight:
_cycle(1);
return true;
case NamedKey.tab:
_cycle(1);
return true;
case NamedKey.enter:
state.submitted = true;
onSubmit?.call(state.hour, state.minute, state.second);
return true;
default:
final c = event.char;
if (c != null && c.length == 1) {
final cp = c.codeUnitAt(0);
if (cp >= 0x30 && cp <= 0x39) {
final digit = cp - 0x30;
switch (state.active) {
case TimeField.hour:
final v = (state.hour % 10) * 10 + digit;
state.hour = v >= 24 ? digit : v;
case TimeField.minute:
final v = (state.minute % 10) * 10 + digit;
state.minute = v >= 60 ? digit : v;
case TimeField.second:
final v = (state.second % 10) * 10 + digit;
state.second = v >= 60 ? digit : v;
case TimeField.ampm:
return false;
}
onChanged?.call(state.hour, state.minute, state.second);
return true;
}
if ((c == 'a' || c == 'A') && !use24Hour) {
if (state.hour >= 12) state.hour -= 12;
onChanged?.call(state.hour, state.minute, state.second);
return true;
}
if ((c == 'p' || c == 'P') && !use24Hour) {
if (state.hour < 12) state.hour += 12;
onChanged?.call(state.hour, state.minute, state.second);
return true;
}
}
return false;
}
}