parseShortcut function

LogicalKeySet? parseShortcut(
  1. String shortcut
)

Implementation

LogicalKeySet? parseShortcut(String shortcut) {
  final parts = shortcut.toLowerCase().split('+').map((s) => s.trim()).toList();

  final keys = <LogicalKeyboardKey>[];

  for (var part in parts) {
    switch (part) {
      case 'ctrl':
      case 'control':
        keys.add(LogicalKeyboardKey.control);
        break;
      case 'shift':
        keys.add(LogicalKeyboardKey.shift);
        break;
      case 'alt':
        keys.add(LogicalKeyboardKey.alt);
        break;
      case 'meta':
      case 'cmd':
      case 'command':
        keys.add(LogicalKeyboardKey.meta);
        break;

    // arrow keys
      case 'up':
      case 'arrowup':
        keys.add(LogicalKeyboardKey.arrowUp);
        break;
      case 'down':
      case 'arrowdown':
        keys.add(LogicalKeyboardKey.arrowDown);
        break;
      case 'left':
      case 'arrowleft':
        keys.add(LogicalKeyboardKey.arrowLeft);
        break;
      case 'right':
      case 'arrowright':
        keys.add(LogicalKeyboardKey.arrowRight);
        break;

    // escape, enter, space etc.
      case 'esc':
      case 'escape':
        keys.add(LogicalKeyboardKey.escape);
        break;
      case 'enter':
      case 'return':
        keys.add(LogicalKeyboardKey.enter);
        break;
      case 'space':
      case 'spacebar':
        keys.add(LogicalKeyboardKey.space);
        break;

      default:
      // check for single character (letters, digits)
        if (part.length == 1) {
          final code = part.toUpperCase().codeUnitAt(0);
          final key = LogicalKeyboardKey(code);
          keys.add(key);
        }
        else {
          // Fallback: try lookup by keyLabel
          final match = LogicalKeyboardKey.knownLogicalKeys.firstWhere(
                (k) => k.keyLabel.toLowerCase() == part,
            orElse: () => LogicalKeyboardKey.camera, // TODO
          );
          if (match != LogicalKeyboardKey.camera) {
            keys.add(match);
          }
        }
    }
  }

  if (keys.isEmpty)
    return null;

  return LogicalKeySet.fromSet(keys.toSet());
}