onKey method

  1. @override
bool onKey(
  1. KeyEvent event,
  2. RenderContext ctx
)
override

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;
  }
}