KeyEvent.fromString constructor
KeyEvent.fromString(
- String spec
Parses a key specification string into a KeyEvent.
Supports both generic and specific modifier syntax:
- 'a' → single character key
- 'enter' → named key (use exact enum names)
- 'ctrl+a' → modifier + key
- 'shift+ctrl+enter' → multiple modifiers
- 'play' → media key (use exact enum names)
- 'ctrl+raiseVolume' → media key with modifier
- 'leftCtrl' → named modifier key itself
Key names are case-insensitive and match the enum names from KeyCodeName.
Throws ArgumentError if the specification is invalid.
Implementation
factory KeyEvent.fromString(String spec) {
if (spec.isEmpty) {
throw ArgumentError('Key specification cannot be empty');
}
final parts = spec.split('+');
final keyPart = parts.last;
final modifierParts = parts.length > 1 ? parts.sublist(0, parts.length - 1) : [parts[0]];
var modifierMask = KeyModifiers.none;
for (final mod in modifierParts) {
final genericMod = _parseGenericModifier(mod);
if (genericMod != null) {
modifierMask |= genericMod;
continue;
}
if (parts.length > 1 && genericMod == null) {
throw ArgumentError('Unknown modifier: $mod');
}
}
var keyCode = _parseKey(keyPart);
// Uppercase letters when shift modifier is present
if (modifierMask.has(KeyModifiers.shift) && keyCode.kind == KeyCodeKind.char && keyCode.char.length == 1) {
final char = keyCode.char;
final code = char.codeUnitAt(0);
// Check if it's a lowercase letter (a-z)
if (code >= 0x61 && code <= 0x7A) {
keyCode = KeyCode.char(char.toUpperCase());
}
}
return KeyEvent(
keyCode,
modifiers: modifierMask,
);
}