handleRawKeyEvent method

KeyEventResult handleRawKeyEvent(
  1. RawKeyEvent event
)

Implementation

KeyEventResult handleRawKeyEvent(RawKeyEvent event) {
  if (kIsWeb) {
    // On web platform, we ignore the key because it's already processed.
    return KeyEventResult.ignored;
  }

  if (event is! RawKeyDownEvent) {
    return KeyEventResult.ignored;
  }

  final keysPressed =
      LogicalKeyboardKey.collapseSynonyms(RawKeyboard.instance.keysPressed);
  final key = event.logicalKey;
  final isMacOS = event.data is RawKeyEventDataMacOs;
  if (!_nonModifierKeys.contains(key) ||
      keysPressed
              .difference(isMacOS ? _macOsModifierKeys : _modifierKeys)
              .length >
          1 ||
      keysPressed.difference(_interestingKeys).isNotEmpty) {
    return KeyEventResult.ignored;
  }

  final isShortcutModifierPressed =
      isMacOS ? event.isMetaPressed : event.isControlPressed;

  if (_moveKeys.contains(key)) {
    onCursorMove(
        key,
        isMacOS ? event.isAltPressed : event.isControlPressed,
        isMacOS ? event.isMetaPressed : event.isAltPressed,
        event.isShiftPressed);
  } else if (isShortcutModifierPressed && (_shortcutKeys.contains(key))) {
    if (key == LogicalKeyboardKey.keyZ ||
        key == LogicalKeyboardKey.keyZ.toUpperCase()) {
      onShortcut(
          event.isShiftPressed ? InputShortcut.REDO : InputShortcut.UNDO);
    } else {
      onShortcut(_keyToShortcut[key]);
    }
  } else if (key == LogicalKeyboardKey.delete) {
    onDelete(true);
  } else if (key == LogicalKeyboardKey.backspace) {
    onDelete(false);
  } else {
    return KeyEventResult.ignored;
  }
  return KeyEventResult.handled;
}