// Copyright 2014 The Flutter Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

import 'package:flutter/foundation.dart';

// DO NOT EDIT -- DO NOT EDIT -- DO NOT EDIT
// This file is generated by dev/tools/gen_keycodes/bin/gen_keycodes.dart and
// should not be edited directly.
//
// Edit the template dev/tools/gen_keycodes/data/keyboard_key.tmpl instead.
// See dev/tools/gen_keycodes/README.md for more information.

/// A base class for all keyboard key types.
///
/// See also:
///
///  * [PhysicalKeyboardKey], a class with static values that describe the keys
///    that are returned from [RawKeyEvent.physicalKey].
///  * [LogicalKeyboardKey], a class with static values that describe the keys
///    that are returned from [RawKeyEvent.logicalKey].
abstract class KeyboardKey with Diagnosticable {
  /// Abstract const constructor. This constructor enables subclasses to provide
  /// const constructors so that they can be used in const expressions.
  const KeyboardKey();
}

/// A class with static values that describe the keys that are returned from
/// [RawKeyEvent.logicalKey].
///
/// These represent *logical* keys, which are keys which are interpreted in the
/// context of any modifiers, modes, or keyboard layouts which may be in effect.
///
/// This is contrast to [PhysicalKeyboardKey], which represents a physical key
/// in a particular location on the keyboard, without regard for the modifier
/// state, mode, or keyboard layout.
///
/// As an example, if you wanted to implement an app where the "Q" key "quit"
/// something, you'd want to look at the logical key to detect this, since you
/// would like to have it match the key with "Q" on it, instead of always
/// looking for "the key next next to the TAB key", since on a French keyboard,
/// the key next to the TAB key has an "A" on it.
///
/// Conversely, if you wanted a game where the key next to the CAPS LOCK (the
/// "A" key on a QWERTY keyboard) moved the player to the left, you'd want to
/// look at the physical key to make sure that regardless of the character the
/// key produces, you got the key that is in that location on the keyboard.
///
/// {@tool dartpad --template=stateful_widget_scaffold}
/// This example shows how to detect if the user has selected the logical "Q"
/// key.
///
/// ```dart imports
/// import 'package:flutter/foundation.dart';
/// import 'package:flutter/services.dart';
/// ```
///
/// ```dart
/// // The node used to request the keyboard focus.
/// final FocusNode _focusNode = FocusNode();
/// // The message to display.
/// String? _message;
///
/// // Focus nodes need to be disposed.
/// @override
/// void dispose() {
///   _focusNode.dispose();
///   super.dispose();
/// }
///
/// // Handles the key events from the RawKeyboardListener and update the
/// // _message.
/// void _handleKeyEvent(RawKeyEvent event) {
///   setState(() {
///     if (event.logicalKey == LogicalKeyboardKey.keyQ) {
///       _message = 'Pressed the "Q" key!';
///     } else {
///       if (kReleaseMode) {
///         _message = 'Not a Q: Pressed 0x${event.logicalKey.keyId.toRadixString(16)}';
///       } else {
///         // The debugName will only print useful information in debug mode.
///         _message = 'Not a Q: Pressed ${event.logicalKey.debugName}';
///       }
///     }
///   });
/// }
///
/// @override
/// Widget build(BuildContext context) {
///   final TextTheme textTheme = Theme.of(context).textTheme;
///   return Container(
///     color: Colors.white,
///     alignment: Alignment.center,
///     child: DefaultTextStyle(
///       style: textTheme.headline4!,
///       child: RawKeyboardListener(
///         focusNode: _focusNode,
///         onKey: _handleKeyEvent,
///         child: AnimatedBuilder(
///           animation: _focusNode,
///           builder: (BuildContext context, Widget? child) {
///             if (!_focusNode.hasFocus) {
///               return GestureDetector(
///                 onTap: () {
///                   FocusScope.of(context).requestFocus(_focusNode);
///                 },
///                 child: const Text('Tap to focus'),
///               );
///             }
///             return Text(_message ?? 'Press a key');
///           },
///         ),
///       ),
///     ),
///   );
/// }
/// ```
/// {@end-tool}
/// See also:
///
///  * [RawKeyEvent], the keyboard event object received by widgets that listen
///    to keyboard events.
///  * [RawKeyboardListener], a widget used to listen to and supply handlers for
///    keyboard events.
@immutable
class LogicalKeyboardKey extends KeyboardKey {
  /// Creates a new LogicalKeyboardKey object for a key ID.
  const LogicalKeyboardKey(this.keyId);

  /// A unique code representing this key.
  ///
  /// This is an opaque code. It should not be unpacked to derive information
  /// from it, as the representation of the code could change at any time.
  final int keyId;

  // Returns the bits that are not included in [valueMask], shifted to the
  // right.
  //
  // For example, if the input is 0x12abcdabcd, then the result is 0x12.
  //
  // This is mostly equivalent to a right shift, resolving the problem that
  // JavaScript only support 32-bit bitwise operation and needs to use division
  // instead.
  static int _nonValueBits(int n) {
    // `n >> valueMaskWidth` is equivalent to `n / divisorForValueMask`.
    const int divisorForValueMask = valueMask + 1;
    const int valueMaskWidth = 32;

    // Equivalent to assert(divisorForValueMask == (1 << valueMaskWidth)).
    const int _firstDivisorWidth = 28;
    assert(divisorForValueMask ==
      (1 << _firstDivisorWidth) * (1 << (valueMaskWidth - _firstDivisorWidth)));

    // JS only supports up to 2^53 - 1, therefore non-value bits can only
    // contain (maxSafeIntegerWidth - valueMaskWidth) bits.
    const int maxSafeIntegerWidth = 52;
    const int nonValueMask = (1 << (maxSafeIntegerWidth - valueMaskWidth)) - 1;

    if (kIsWeb) {
      return (n / divisorForValueMask).floor() & nonValueMask;
    } else {
      return (n >> valueMaskWidth) & nonValueMask;
    }
  }

  static String? _unicodeKeyLabel(int keyId) {
    if (_nonValueBits(keyId) == 0) {
      return String.fromCharCode(keyId).toUpperCase();
    }
    return null;
  }

  /// A description representing the character produced by a [RawKeyEvent].
  ///
  /// This value is useful for providing readable strings for keys or keyboard
  /// shortcuts. Do not use this value to compare equality of keys; compare
  /// [keyId] instead.
  ///
  /// For printable keys, this is usually the printable character in upper case
  /// ignoring modifiers or combining keys, such as 'A', '1', or '/'. This
  /// might also return accented letters (such as 'Ù') for keys labeled as so,
  /// but not if such character is a result from preceding combining keys ('`̀'
  /// followed by key U).
  ///
  /// For other keys, [keyLabel] looks up the full key name from a predefined
  /// map, such as 'F1', 'Shift Left', or 'Media Down'. This value is an empty
  /// string if there's no key label data for a key.
  ///
  /// For the printable representation that takes into consideration the
  /// modifiers and combining keys, see [RawKeyEvent.character].
  ///
  /// {@macro flutter.services.RawKeyEventData.keyLabel}
  String get keyLabel {
    return _unicodeKeyLabel(keyId)
        ?? _keyLabels[keyId]
        ?? '';
  }

  /// The debug string to print for this keyboard key, which will be null in
  /// release mode.
  ///
  /// For printable keys, this is usually a more descriptive name related to
  /// [keyLabel], such as 'Key A', 'Digit 1', 'Backslash'. This might
  /// also return accented letters (such as 'Key Ù') for keys labeled as so.
  ///
  /// For other keys, this looks up the full key name from a predefined map (the
  /// same value as [keyLabel]), such as 'F1', 'Shift Left', or 'Media Down'. If
  /// there's no key label data for a key, this returns a name that explains the
  /// ID (such as 'Key with ID 0x00100012345').
  String? get debugName {
    String? result;
    assert(() {
      result = _keyLabels[keyId];
      if (result == null) {
        final String? unicodeKeyLabel = _unicodeKeyLabel(keyId);
        if (unicodeKeyLabel != null) {
          result = 'Key $unicodeKeyLabel';
        } else {
          result = 'Key with ID 0x${keyId.toRadixString(16).padLeft(11, '0')}';
        }
      }
      return true;
    }());
    return result;
  }

  @override
  int get hashCode => keyId.hashCode;

  @override
  bool operator ==(Object other) {
    if (identical(this, other))
      return true;
    if (other.runtimeType != runtimeType)
      return false;
    return other is LogicalKeyboardKey
        && other.keyId == keyId;
  }

  /// Returns the [LogicalKeyboardKey] constant that matches the given ID, or
  /// null, if not found.
  static LogicalKeyboardKey? findKeyByKeyId(int keyId) => _knownLogicalKeys[keyId];

  /// Returns true if the given label represents a Unicode control character.
  ///
  /// Examples of control characters are characters like "U+000A LINE FEED (LF)"
  /// or "U+001B ESCAPE (ESC)".
  ///
  /// See <https://en.wikipedia.org/wiki/Unicode_control_characters> for more
  /// information.
  ///
  /// Used by [RawKeyEvent] subclasses to help construct IDs.
  static bool isControlCharacter(String label) {
    if (label.length != 1) {
      return false;
    }
    final int codeUnit = label.codeUnitAt(0);
    return (codeUnit <= 0x1f && codeUnit >= 0x00) || (codeUnit >= 0x7f && codeUnit <= 0x9f);
  }

  /// Returns true if the [keyId] of this object is one that is auto-generated by
  /// Flutter.
  ///
  /// Auto-generated key IDs are generated in response to platform key codes
  /// which Flutter doesn't recognize, and their IDs shouldn't be used in a
  /// persistent way.
  ///
  /// Auto-generated IDs should be a rare occurrence: Flutter supports most keys.
  ///
  /// Keys that generate Unicode characters (even if unknown to Flutter) will
  /// not return true for `isAutogenerated`, since they will be assigned a
  /// Unicode-based code that will remain stable.
  ///
  /// If Flutter adds support for a previously unsupported key code, the ID it
  /// reports will change, but the ID will remain stable on the platform it is
  /// produced on until Flutter adds support for recognizing it.
  ///
  /// So, hypothetically, if Android added a new key code of 0xffff,
  /// representing a new "do what I mean" key, then the auto-generated code
  /// would be 0x1020000ffff, but once Flutter added the "doWhatIMean" key to
  /// the definitions below, the new code would be 0x0020000ffff for all
  /// platforms that had a "do what I mean" key from then on.
  bool get isAutogenerated => (keyId & autogeneratedMask) != 0;

  /// Returns a set of pseudo-key synonyms for the given `key`.
  ///
  /// This allows finding the pseudo-keys that also represents a concrete
  /// `key` so that a class with a key map can match pseudo-keys as well as the
  /// actual generated keys.
  ///
  /// The pseudo-keys returned in the set are typically used to represent keys
  /// which appear in multiple places on the keyboard, such as the [shift],
  /// [alt], [control], and [meta] keys. The keys in the returned set won't ever
  /// be generated directly, but if a more specific key event is received, then
  /// this set can be used to find the more general pseudo-key. For example, if
  /// this is a [shiftLeft] key, this accessor will return the set
  /// `<LogicalKeyboardKey>{ shift }`.
  Set<LogicalKeyboardKey> get synonyms {
    final LogicalKeyboardKey? result = _synonyms[this];
    return result == null ? <LogicalKeyboardKey>{} : <LogicalKeyboardKey>{result};
  }

  /// Takes a set of keys, and returns the same set, but with any keys that have
  /// synonyms replaced.
  ///
  /// It is used, for example, to make sets of keys with members like
  /// [controlRight] and [controlLeft] and convert that set to contain just
  /// [control], so that the question "is any control key down?" can be asked.
  static Set<LogicalKeyboardKey> collapseSynonyms(Set<LogicalKeyboardKey> input) {
    final Set<LogicalKeyboardKey> result = <LogicalKeyboardKey>{};
    for (final LogicalKeyboardKey key in input) {
      final LogicalKeyboardKey? synonym = _synonyms[key];
      result.add(synonym ?? key);
    }
    return result;
  }

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(StringProperty('keyId', '0x${keyId.toRadixString(16).padLeft(8, '0')}', showName: true));
    properties.add(StringProperty('keyLabel', keyLabel, showName: true));
    properties.add(StringProperty('debugName', debugName, showName: true, defaultValue: null));
  }

  /// Mask for the 32-bit value portion of the key code.
  ///
  /// This is used by platform-specific code to generate Flutter key codes.
  static const int valueMask = 0x000FFFFFFFF;

  /// Mask for the platform prefix portion of the key code.
  ///
  /// This is used by platform-specific code to generate Flutter key codes.
  static const int platformMask = 0x0FF00000000;

  /// Mask for the auto-generated bit portion of the key code.
  ///
  /// This is used by platform-specific code to generate new Flutter key codes
  /// for keys which are not recognized.
  static const int autogeneratedMask = 0x10000000000;

  /// Mask for the synonym pseudo-keys generated for keys which appear in more
  /// than one place on the keyboard.
  ///
  /// IDs in this range are used to represent keys which appear in multiple
  /// places on the keyboard, such as the SHIFT, ALT, CTRL, and numeric keypad
  /// keys. These key codes will never be generated by the key event system, but
  /// may be used in key maps to represent the union of all the keys of each
  /// type in order to match them.
  ///
  /// To look up the synonyms that are defined, look in the [synonyms] map.
  static const int synonymMask = 0x20000000000;

  /// The code prefix for keys which have a Unicode representation.
  ///
  /// This is used by platform-specific code to generate Flutter key codes.
  static const int unicodePlane = 0x00000000000;

  /// The code prefix for keys which do not have a Unicode representation.
  ///
  /// This is used by platform-specific code to generate Flutter key codes using
  /// HID Usage codes.
  static const int hidPlane = 0x00100000000;

  /// Represents the logical "None" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey none = LogicalKeyboardKey(0x00100000000);

  /// Represents the logical "Hyper" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey hyper = LogicalKeyboardKey(0x00100000010);

  /// Represents the logical "Super Key" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey superKey = LogicalKeyboardKey(0x00100000011);

  /// Represents the logical "Fn Lock" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey fnLock = LogicalKeyboardKey(0x00100000013);

  /// Represents the logical "Suspend" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey suspend = LogicalKeyboardKey(0x00100000014);

  /// Represents the logical "Resume" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey resume = LogicalKeyboardKey(0x00100000015);

  /// Represents the logical "Turbo" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey turbo = LogicalKeyboardKey(0x00100000016);

  /// Represents the logical "Privacy Screen Toggle" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey privacyScreenToggle = LogicalKeyboardKey(0x00100000017);

  /// Represents the logical "Sleep" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey sleep = LogicalKeyboardKey(0x00100010082);

  /// Represents the logical "Wake Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey wakeUp = LogicalKeyboardKey(0x00100010083);

  /// Represents the logical "Display Toggle Int Ext" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey displayToggleIntExt = LogicalKeyboardKey(0x001000100b5);

  /// Represents the logical "Usb Reserved" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey usbReserved = LogicalKeyboardKey(0x00100070000);

  /// Represents the logical "Usb Error Roll Over" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey usbErrorRollOver = LogicalKeyboardKey(0x00100070001);

  /// Represents the logical "Usb Post Fail" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey usbPostFail = LogicalKeyboardKey(0x00100070002);

  /// Represents the logical "Usb Error Undefined" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey usbErrorUndefined = LogicalKeyboardKey(0x00100070003);

  /// Represents the logical "Key A" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyA = LogicalKeyboardKey(0x00000000061);

  /// Represents the logical "Key B" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyB = LogicalKeyboardKey(0x00000000062);

  /// Represents the logical "Key C" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyC = LogicalKeyboardKey(0x00000000063);

  /// Represents the logical "Key D" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyD = LogicalKeyboardKey(0x00000000064);

  /// Represents the logical "Key E" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyE = LogicalKeyboardKey(0x00000000065);

  /// Represents the logical "Key F" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyF = LogicalKeyboardKey(0x00000000066);

  /// Represents the logical "Key G" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyG = LogicalKeyboardKey(0x00000000067);

  /// Represents the logical "Key H" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyH = LogicalKeyboardKey(0x00000000068);

  /// Represents the logical "Key I" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyI = LogicalKeyboardKey(0x00000000069);

  /// Represents the logical "Key J" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyJ = LogicalKeyboardKey(0x0000000006a);

  /// Represents the logical "Key K" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyK = LogicalKeyboardKey(0x0000000006b);

  /// Represents the logical "Key L" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyL = LogicalKeyboardKey(0x0000000006c);

  /// Represents the logical "Key M" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyM = LogicalKeyboardKey(0x0000000006d);

  /// Represents the logical "Key N" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyN = LogicalKeyboardKey(0x0000000006e);

  /// Represents the logical "Key O" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyO = LogicalKeyboardKey(0x0000000006f);

  /// Represents the logical "Key P" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyP = LogicalKeyboardKey(0x00000000070);

  /// Represents the logical "Key Q" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyQ = LogicalKeyboardKey(0x00000000071);

  /// Represents the logical "Key R" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyR = LogicalKeyboardKey(0x00000000072);

  /// Represents the logical "Key S" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyS = LogicalKeyboardKey(0x00000000073);

  /// Represents the logical "Key T" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyT = LogicalKeyboardKey(0x00000000074);

  /// Represents the logical "Key U" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyU = LogicalKeyboardKey(0x00000000075);

  /// Represents the logical "Key V" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyV = LogicalKeyboardKey(0x00000000076);

  /// Represents the logical "Key W" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyW = LogicalKeyboardKey(0x00000000077);

  /// Represents the logical "Key X" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyX = LogicalKeyboardKey(0x00000000078);

  /// Represents the logical "Key Y" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyY = LogicalKeyboardKey(0x00000000079);

  /// Represents the logical "Key Z" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyZ = LogicalKeyboardKey(0x0000000007a);

  /// Represents the logical "Digit 1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit1 = LogicalKeyboardKey(0x00000000031);

  /// Represents the logical "Digit 2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit2 = LogicalKeyboardKey(0x00000000032);

  /// Represents the logical "Digit 3" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit3 = LogicalKeyboardKey(0x00000000033);

  /// Represents the logical "Digit 4" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit4 = LogicalKeyboardKey(0x00000000034);

  /// Represents the logical "Digit 5" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit5 = LogicalKeyboardKey(0x00000000035);

  /// Represents the logical "Digit 6" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit6 = LogicalKeyboardKey(0x00000000036);

  /// Represents the logical "Digit 7" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit7 = LogicalKeyboardKey(0x00000000037);

  /// Represents the logical "Digit 8" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit8 = LogicalKeyboardKey(0x00000000038);

  /// Represents the logical "Digit 9" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit9 = LogicalKeyboardKey(0x00000000039);

  /// Represents the logical "Digit 0" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey digit0 = LogicalKeyboardKey(0x00000000030);

  /// Represents the logical "Enter" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey enter = LogicalKeyboardKey(0x00100070028);

  /// Represents the logical "Escape" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey escape = LogicalKeyboardKey(0x00100070029);

  /// Represents the logical "Backspace" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey backspace = LogicalKeyboardKey(0x0010007002a);

  /// Represents the logical "Tab" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey tab = LogicalKeyboardKey(0x0010007002b);

  /// Represents the logical "Space" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey space = LogicalKeyboardKey(0x00000000020);

  /// Represents the logical "Minus" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey minus = LogicalKeyboardKey(0x0000000002d);

  /// Represents the logical "Equal" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey equal = LogicalKeyboardKey(0x0000000003d);

  /// Represents the logical "Bracket Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey bracketLeft = LogicalKeyboardKey(0x0000000005b);

  /// Represents the logical "Bracket Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey bracketRight = LogicalKeyboardKey(0x0000000005d);

  /// Represents the logical "Backslash" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey backslash = LogicalKeyboardKey(0x0000000005c);

  /// Represents the logical "Semicolon" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey semicolon = LogicalKeyboardKey(0x0000000003b);

  /// Represents the logical "Quote" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey quote = LogicalKeyboardKey(0x00000000027);

  /// Represents the logical "Backquote" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey backquote = LogicalKeyboardKey(0x00000000060);

  /// Represents the logical "Comma" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey comma = LogicalKeyboardKey(0x0000000002c);

  /// Represents the logical "Period" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey period = LogicalKeyboardKey(0x0000000002e);

  /// Represents the logical "Slash" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey slash = LogicalKeyboardKey(0x0000000002f);

  /// Represents the logical "Caps Lock" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey capsLock = LogicalKeyboardKey(0x00100070039);

  /// Represents the logical "F1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f1 = LogicalKeyboardKey(0x0010007003a);

  /// Represents the logical "F2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f2 = LogicalKeyboardKey(0x0010007003b);

  /// Represents the logical "F3" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f3 = LogicalKeyboardKey(0x0010007003c);

  /// Represents the logical "F4" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f4 = LogicalKeyboardKey(0x0010007003d);

  /// Represents the logical "F5" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f5 = LogicalKeyboardKey(0x0010007003e);

  /// Represents the logical "F6" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f6 = LogicalKeyboardKey(0x0010007003f);

  /// Represents the logical "F7" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f7 = LogicalKeyboardKey(0x00100070040);

  /// Represents the logical "F8" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f8 = LogicalKeyboardKey(0x00100070041);

  /// Represents the logical "F9" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f9 = LogicalKeyboardKey(0x00100070042);

  /// Represents the logical "F10" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f10 = LogicalKeyboardKey(0x00100070043);

  /// Represents the logical "F11" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f11 = LogicalKeyboardKey(0x00100070044);

  /// Represents the logical "F12" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f12 = LogicalKeyboardKey(0x00100070045);

  /// Represents the logical "Print Screen" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey printScreen = LogicalKeyboardKey(0x00100070046);

  /// Represents the logical "Scroll Lock" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey scrollLock = LogicalKeyboardKey(0x00100070047);

  /// Represents the logical "Pause" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey pause = LogicalKeyboardKey(0x00100070048);

  /// Represents the logical "Insert" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey insert = LogicalKeyboardKey(0x00100070049);

  /// Represents the logical "Home" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey home = LogicalKeyboardKey(0x0010007004a);

  /// Represents the logical "Page Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey pageUp = LogicalKeyboardKey(0x0010007004b);

  /// Represents the logical "Delete" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey delete = LogicalKeyboardKey(0x0010007004c);

  /// Represents the logical "End" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey end = LogicalKeyboardKey(0x0010007004d);

  /// Represents the logical "Page Down" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey pageDown = LogicalKeyboardKey(0x0010007004e);

  /// Represents the logical "Arrow Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey arrowRight = LogicalKeyboardKey(0x0010007004f);

  /// Represents the logical "Arrow Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey arrowLeft = LogicalKeyboardKey(0x00100070050);

  /// Represents the logical "Arrow Down" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey arrowDown = LogicalKeyboardKey(0x00100070051);

  /// Represents the logical "Arrow Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey arrowUp = LogicalKeyboardKey(0x00100070052);

  /// Represents the logical "Num Lock" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numLock = LogicalKeyboardKey(0x00100070053);

  /// Represents the logical "Numpad Divide" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadDivide = LogicalKeyboardKey(0x00100070054);

  /// Represents the logical "Numpad Multiply" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadMultiply = LogicalKeyboardKey(0x00100070055);

  /// Represents the logical "Numpad Subtract" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadSubtract = LogicalKeyboardKey(0x00100070056);

  /// Represents the logical "Numpad Add" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadAdd = LogicalKeyboardKey(0x00100070057);

  /// Represents the logical "Numpad Enter" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadEnter = LogicalKeyboardKey(0x00100070058);

  /// Represents the logical "Numpad 1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad1 = LogicalKeyboardKey(0x00100070059);

  /// Represents the logical "Numpad 2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad2 = LogicalKeyboardKey(0x0010007005a);

  /// Represents the logical "Numpad 3" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad3 = LogicalKeyboardKey(0x0010007005b);

  /// Represents the logical "Numpad 4" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad4 = LogicalKeyboardKey(0x0010007005c);

  /// Represents the logical "Numpad 5" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad5 = LogicalKeyboardKey(0x0010007005d);

  /// Represents the logical "Numpad 6" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad6 = LogicalKeyboardKey(0x0010007005e);

  /// Represents the logical "Numpad 7" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad7 = LogicalKeyboardKey(0x0010007005f);

  /// Represents the logical "Numpad 8" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad8 = LogicalKeyboardKey(0x00100070060);

  /// Represents the logical "Numpad 9" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad9 = LogicalKeyboardKey(0x00100070061);

  /// Represents the logical "Numpad 0" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpad0 = LogicalKeyboardKey(0x00100070062);

  /// Represents the logical "Numpad Decimal" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadDecimal = LogicalKeyboardKey(0x00100070063);

  /// Represents the logical "Intl Backslash" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey intlBackslash = LogicalKeyboardKey(0x00100070064);

  /// Represents the logical "Context Menu" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey contextMenu = LogicalKeyboardKey(0x00100070065);

  /// Represents the logical "Power" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey power = LogicalKeyboardKey(0x00100070066);

  /// Represents the logical "Numpad Equal" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadEqual = LogicalKeyboardKey(0x00100070067);

  /// Represents the logical "F13" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f13 = LogicalKeyboardKey(0x00100070068);

  /// Represents the logical "F14" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f14 = LogicalKeyboardKey(0x00100070069);

  /// Represents the logical "F15" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f15 = LogicalKeyboardKey(0x0010007006a);

  /// Represents the logical "F16" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f16 = LogicalKeyboardKey(0x0010007006b);

  /// Represents the logical "F17" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f17 = LogicalKeyboardKey(0x0010007006c);

  /// Represents the logical "F18" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f18 = LogicalKeyboardKey(0x0010007006d);

  /// Represents the logical "F19" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f19 = LogicalKeyboardKey(0x0010007006e);

  /// Represents the logical "F20" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f20 = LogicalKeyboardKey(0x0010007006f);

  /// Represents the logical "F21" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f21 = LogicalKeyboardKey(0x00100070070);

  /// Represents the logical "F22" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f22 = LogicalKeyboardKey(0x00100070071);

  /// Represents the logical "F23" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f23 = LogicalKeyboardKey(0x00100070072);

  /// Represents the logical "F24" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey f24 = LogicalKeyboardKey(0x00100070073);

  /// Represents the logical "Open" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey open = LogicalKeyboardKey(0x00100070074);

  /// Represents the logical "Help" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey help = LogicalKeyboardKey(0x00100070075);

  /// Represents the logical "Select" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey select = LogicalKeyboardKey(0x00100070077);

  /// Represents the logical "Again" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey again = LogicalKeyboardKey(0x00100070079);

  /// Represents the logical "Undo" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey undo = LogicalKeyboardKey(0x0010007007a);

  /// Represents the logical "Cut" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey cut = LogicalKeyboardKey(0x0010007007b);

  /// Represents the logical "Copy" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey copy = LogicalKeyboardKey(0x0010007007c);

  /// Represents the logical "Paste" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey paste = LogicalKeyboardKey(0x0010007007d);

  /// Represents the logical "Find" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey find = LogicalKeyboardKey(0x0010007007e);

  /// Represents the logical "Audio Volume Mute" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey audioVolumeMute = LogicalKeyboardKey(0x0010007007f);

  /// Represents the logical "Audio Volume Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey audioVolumeUp = LogicalKeyboardKey(0x00100070080);

  /// Represents the logical "Audio Volume Down" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey audioVolumeDown = LogicalKeyboardKey(0x00100070081);

  /// Represents the logical "Numpad Comma" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadComma = LogicalKeyboardKey(0x00100070085);

  /// Represents the logical "Intl Ro" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey intlRo = LogicalKeyboardKey(0x00100070087);

  /// Represents the logical "Kana Mode" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey kanaMode = LogicalKeyboardKey(0x00100070088);

  /// Represents the logical "Intl Yen" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey intlYen = LogicalKeyboardKey(0x00100070089);

  /// Represents the logical "Convert" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey convert = LogicalKeyboardKey(0x0010007008a);

  /// Represents the logical "Non Convert" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey nonConvert = LogicalKeyboardKey(0x0010007008b);

  /// Represents the logical "Lang 1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey lang1 = LogicalKeyboardKey(0x00100070090);

  /// Represents the logical "Lang 2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey lang2 = LogicalKeyboardKey(0x00100070091);

  /// Represents the logical "Lang 3" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey lang3 = LogicalKeyboardKey(0x00100070092);

  /// Represents the logical "Lang 4" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey lang4 = LogicalKeyboardKey(0x00100070093);

  /// Represents the logical "Lang 5" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey lang5 = LogicalKeyboardKey(0x00100070094);

  /// Represents the logical "Abort" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey abort = LogicalKeyboardKey(0x0010007009b);

  /// Represents the logical "Props" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey props = LogicalKeyboardKey(0x001000700a3);

  /// Represents the logical "Numpad Paren Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadParenLeft = LogicalKeyboardKey(0x001000700b6);

  /// Represents the logical "Numpad Paren Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadParenRight = LogicalKeyboardKey(0x001000700b7);

  /// Represents the logical "Numpad Backspace" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadBackspace = LogicalKeyboardKey(0x001000700bb);

  /// Represents the logical "Numpad Memory Store" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadMemoryStore = LogicalKeyboardKey(0x001000700d0);

  /// Represents the logical "Numpad Memory Recall" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadMemoryRecall = LogicalKeyboardKey(0x001000700d1);

  /// Represents the logical "Numpad Memory Clear" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadMemoryClear = LogicalKeyboardKey(0x001000700d2);

  /// Represents the logical "Numpad Memory Add" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadMemoryAdd = LogicalKeyboardKey(0x001000700d3);

  /// Represents the logical "Numpad Memory Subtract" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadMemorySubtract = LogicalKeyboardKey(0x001000700d4);

  /// Represents the logical "Numpad Sign Change" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadSignChange = LogicalKeyboardKey(0x001000700d7);

  /// Represents the logical "Numpad Clear" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadClear = LogicalKeyboardKey(0x001000700d8);

  /// Represents the logical "Numpad Clear Entry" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey numpadClearEntry = LogicalKeyboardKey(0x001000700d9);

  /// Represents the logical "Control Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey controlLeft = LogicalKeyboardKey(0x001000700e0);

  /// Represents the logical "Shift Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey shiftLeft = LogicalKeyboardKey(0x001000700e1);

  /// Represents the logical "Alt Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey altLeft = LogicalKeyboardKey(0x001000700e2);

  /// Represents the logical "Meta Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey metaLeft = LogicalKeyboardKey(0x001000700e3);

  /// Represents the logical "Control Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey controlRight = LogicalKeyboardKey(0x001000700e4);

  /// Represents the logical "Shift Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey shiftRight = LogicalKeyboardKey(0x001000700e5);

  /// Represents the logical "Alt Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey altRight = LogicalKeyboardKey(0x001000700e6);

  /// Represents the logical "Meta Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey metaRight = LogicalKeyboardKey(0x001000700e7);

  /// Represents the logical "Info" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey info = LogicalKeyboardKey(0x001000c0060);

  /// Represents the logical "Closed Caption Toggle" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey closedCaptionToggle = LogicalKeyboardKey(0x001000c0061);

  /// Represents the logical "Brightness Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey brightnessUp = LogicalKeyboardKey(0x001000c006f);

  /// Represents the logical "Brightness Down" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey brightnessDown = LogicalKeyboardKey(0x001000c0070);

  /// Represents the logical "Brightness Toggle" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey brightnessToggle = LogicalKeyboardKey(0x001000c0072);

  /// Represents the logical "Brightness Minimum" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey brightnessMinimum = LogicalKeyboardKey(0x001000c0073);

  /// Represents the logical "Brightness Maximum" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey brightnessMaximum = LogicalKeyboardKey(0x001000c0074);

  /// Represents the logical "Brightness Auto" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey brightnessAuto = LogicalKeyboardKey(0x001000c0075);

  /// Represents the logical "Kbd Illum Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey kbdIllumUp = LogicalKeyboardKey(0x001000c0079);

  /// Represents the logical "Kbd Illum Down" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey kbdIllumDown = LogicalKeyboardKey(0x001000c007a);

  /// Represents the logical "Media Last" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaLast = LogicalKeyboardKey(0x001000c0083);

  /// Represents the logical "Launch Phone" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchPhone = LogicalKeyboardKey(0x001000c008c);

  /// Represents the logical "Program Guide" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey programGuide = LogicalKeyboardKey(0x001000c008d);

  /// Represents the logical "Exit" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey exit = LogicalKeyboardKey(0x001000c0094);

  /// Represents the logical "Channel Up" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey channelUp = LogicalKeyboardKey(0x001000c009c);

  /// Represents the logical "Channel Down" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey channelDown = LogicalKeyboardKey(0x001000c009d);

  /// Represents the logical "Media Play" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaPlay = LogicalKeyboardKey(0x001000c00b0);

  /// Represents the logical "Media Pause" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaPause = LogicalKeyboardKey(0x001000c00b1);

  /// Represents the logical "Media Record" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaRecord = LogicalKeyboardKey(0x001000c00b2);

  /// Represents the logical "Media Fast Forward" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaFastForward = LogicalKeyboardKey(0x001000c00b3);

  /// Represents the logical "Media Rewind" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaRewind = LogicalKeyboardKey(0x001000c00b4);

  /// Represents the logical "Media Track Next" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaTrackNext = LogicalKeyboardKey(0x001000c00b5);

  /// Represents the logical "Media Track Previous" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaTrackPrevious = LogicalKeyboardKey(0x001000c00b6);

  /// Represents the logical "Media Stop" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaStop = LogicalKeyboardKey(0x001000c00b7);

  /// Represents the logical "Eject" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey eject = LogicalKeyboardKey(0x001000c00b8);

  /// Represents the logical "Media Play Pause" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaPlayPause = LogicalKeyboardKey(0x001000c00cd);

  /// Represents the logical "Speech Input Toggle" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey speechInputToggle = LogicalKeyboardKey(0x001000c00cf);

  /// Represents the logical "Bass Boost" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey bassBoost = LogicalKeyboardKey(0x001000c00e5);

  /// Represents the logical "Media Select" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mediaSelect = LogicalKeyboardKey(0x001000c0183);

  /// Represents the logical "Launch Word Processor" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchWordProcessor = LogicalKeyboardKey(0x001000c0184);

  /// Represents the logical "Launch Spreadsheet" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchSpreadsheet = LogicalKeyboardKey(0x001000c0186);

  /// Represents the logical "Launch Mail" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchMail = LogicalKeyboardKey(0x001000c018a);

  /// Represents the logical "Launch Contacts" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchContacts = LogicalKeyboardKey(0x001000c018d);

  /// Represents the logical "Launch Calendar" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchCalendar = LogicalKeyboardKey(0x001000c018e);

  /// Represents the logical "Launch App2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchApp2 = LogicalKeyboardKey(0x001000c0192);

  /// Represents the logical "Launch App1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchApp1 = LogicalKeyboardKey(0x001000c0194);

  /// Represents the logical "Launch Internet Browser" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchInternetBrowser = LogicalKeyboardKey(0x001000c0196);

  /// Represents the logical "Log Off" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey logOff = LogicalKeyboardKey(0x001000c019c);

  /// Represents the logical "Lock Screen" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey lockScreen = LogicalKeyboardKey(0x001000c019e);

  /// Represents the logical "Launch Control Panel" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchControlPanel = LogicalKeyboardKey(0x001000c019f);

  /// Represents the logical "Select Task" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey selectTask = LogicalKeyboardKey(0x001000c01a2);

  /// Represents the logical "Launch Documents" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchDocuments = LogicalKeyboardKey(0x001000c01a7);

  /// Represents the logical "Spell Check" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey spellCheck = LogicalKeyboardKey(0x001000c01ab);

  /// Represents the logical "Launch Keyboard Layout" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchKeyboardLayout = LogicalKeyboardKey(0x001000c01ae);

  /// Represents the logical "Launch Screen Saver" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchScreenSaver = LogicalKeyboardKey(0x001000c01b1);

  /// Represents the logical "Launch Assistant" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchAssistant = LogicalKeyboardKey(0x001000c01cb);

  /// Represents the logical "Launch Audio Browser" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey launchAudioBrowser = LogicalKeyboardKey(0x001000c01b7);

  /// Represents the logical "New Key" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey newKey = LogicalKeyboardKey(0x001000c0201);

  /// Represents the logical "Close" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey close = LogicalKeyboardKey(0x001000c0203);

  /// Represents the logical "Save" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey save = LogicalKeyboardKey(0x001000c0207);

  /// Represents the logical "Print" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey print = LogicalKeyboardKey(0x001000c0208);

  /// Represents the logical "Browser Search" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserSearch = LogicalKeyboardKey(0x001000c0221);

  /// Represents the logical "Browser Home" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserHome = LogicalKeyboardKey(0x001000c0223);

  /// Represents the logical "Browser Back" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserBack = LogicalKeyboardKey(0x001000c0224);

  /// Represents the logical "Browser Forward" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserForward = LogicalKeyboardKey(0x001000c0225);

  /// Represents the logical "Browser Stop" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserStop = LogicalKeyboardKey(0x001000c0226);

  /// Represents the logical "Browser Refresh" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserRefresh = LogicalKeyboardKey(0x001000c0227);

  /// Represents the logical "Browser Favorites" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey browserFavorites = LogicalKeyboardKey(0x001000c022a);

  /// Represents the logical "Zoom In" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey zoomIn = LogicalKeyboardKey(0x001000c022d);

  /// Represents the logical "Zoom Out" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey zoomOut = LogicalKeyboardKey(0x001000c022e);

  /// Represents the logical "Zoom Toggle" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey zoomToggle = LogicalKeyboardKey(0x001000c0232);

  /// Represents the logical "Redo" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey redo = LogicalKeyboardKey(0x001000c0279);

  /// Represents the logical "Mail Reply" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mailReply = LogicalKeyboardKey(0x001000c0289);

  /// Represents the logical "Mail Forward" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mailForward = LogicalKeyboardKey(0x001000c028b);

  /// Represents the logical "Mail Send" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey mailSend = LogicalKeyboardKey(0x001000c028c);

  /// Represents the logical "Keyboard Layout Select" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey keyboardLayoutSelect = LogicalKeyboardKey(0x001000c029d);

  /// Represents the logical "Show All Windows" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey showAllWindows = LogicalKeyboardKey(0x001000c029f);

  /// Represents the logical "Game Button 1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton1 = LogicalKeyboardKey(0x0010005ff01);

  /// Represents the logical "Game Button 2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton2 = LogicalKeyboardKey(0x0010005ff02);

  /// Represents the logical "Game Button 3" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton3 = LogicalKeyboardKey(0x0010005ff03);

  /// Represents the logical "Game Button 4" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton4 = LogicalKeyboardKey(0x0010005ff04);

  /// Represents the logical "Game Button 5" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton5 = LogicalKeyboardKey(0x0010005ff05);

  /// Represents the logical "Game Button 6" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton6 = LogicalKeyboardKey(0x0010005ff06);

  /// Represents the logical "Game Button 7" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton7 = LogicalKeyboardKey(0x0010005ff07);

  /// Represents the logical "Game Button 8" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton8 = LogicalKeyboardKey(0x0010005ff08);

  /// Represents the logical "Game Button 9" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton9 = LogicalKeyboardKey(0x0010005ff09);

  /// Represents the logical "Game Button 10" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton10 = LogicalKeyboardKey(0x0010005ff0a);

  /// Represents the logical "Game Button 11" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton11 = LogicalKeyboardKey(0x0010005ff0b);

  /// Represents the logical "Game Button 12" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton12 = LogicalKeyboardKey(0x0010005ff0c);

  /// Represents the logical "Game Button 13" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton13 = LogicalKeyboardKey(0x0010005ff0d);

  /// Represents the logical "Game Button 14" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton14 = LogicalKeyboardKey(0x0010005ff0e);

  /// Represents the logical "Game Button 15" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton15 = LogicalKeyboardKey(0x0010005ff0f);

  /// Represents the logical "Game Button 16" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButton16 = LogicalKeyboardKey(0x0010005ff10);

  /// Represents the logical "Game Button A" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonA = LogicalKeyboardKey(0x0010005ff11);

  /// Represents the logical "Game Button B" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonB = LogicalKeyboardKey(0x0010005ff12);

  /// Represents the logical "Game Button C" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonC = LogicalKeyboardKey(0x0010005ff13);

  /// Represents the logical "Game Button Left 1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonLeft1 = LogicalKeyboardKey(0x0010005ff14);

  /// Represents the logical "Game Button Left 2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonLeft2 = LogicalKeyboardKey(0x0010005ff15);

  /// Represents the logical "Game Button Mode" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonMode = LogicalKeyboardKey(0x0010005ff16);

  /// Represents the logical "Game Button Right 1" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonRight1 = LogicalKeyboardKey(0x0010005ff17);

  /// Represents the logical "Game Button Right 2" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonRight2 = LogicalKeyboardKey(0x0010005ff18);

  /// Represents the logical "Game Button Select" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonSelect = LogicalKeyboardKey(0x0010005ff19);

  /// Represents the logical "Game Button Start" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonStart = LogicalKeyboardKey(0x0010005ff1a);

  /// Represents the logical "Game Button Thumb Left" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonThumbLeft = LogicalKeyboardKey(0x0010005ff1b);

  /// Represents the logical "Game Button Thumb Right" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonThumbRight = LogicalKeyboardKey(0x0010005ff1c);

  /// Represents the logical "Game Button X" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonX = LogicalKeyboardKey(0x0010005ff1d);

  /// Represents the logical "Game Button Y" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonY = LogicalKeyboardKey(0x0010005ff1e);

  /// Represents the logical "Game Button Z" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey gameButtonZ = LogicalKeyboardKey(0x0010005ff1f);

  /// Represents the logical "Fn" key on the keyboard.
  ///
  /// See the function [RawKeyEvent.logicalKey] for more information.
  static const LogicalKeyboardKey fn = LogicalKeyboardKey(0x00100000012);

  /// Represents the logical "Shift" key on the keyboard.
  ///
  /// This key represents the union of the keys {shiftLeft, shiftRight} when
  /// comparing keys. This key will never be generated directly, its main use is
  /// in defining key maps.
  static const LogicalKeyboardKey shift = LogicalKeyboardKey(0x201000700e1);

  /// Represents the logical "Meta" key on the keyboard.
  ///
  /// This key represents the union of the keys {metaLeft, metaRight} when
  /// comparing keys. This key will never be generated directly, its main use is
  /// in defining key maps.
  static const LogicalKeyboardKey meta = LogicalKeyboardKey(0x201000700e3);

  /// Represents the logical "Alt" key on the keyboard.
  ///
  /// This key represents the union of the keys {altLeft, altRight} when
  /// comparing keys. This key will never be generated directly, its main use is
  /// in defining key maps.
  static const LogicalKeyboardKey alt = LogicalKeyboardKey(0x201000700e2);

  /// Represents the logical "Control" key on the keyboard.
  ///
  /// This key represents the union of the keys {controlLeft, controlRight} when
  /// comparing keys. This key will never be generated directly, its main use is
  /// in defining key maps.
  static const LogicalKeyboardKey control = LogicalKeyboardKey(0x201000700e0);

  // A list of all predefined constant LogicalKeyboardKeys so they can be
  // searched.
  static const Map<int, LogicalKeyboardKey> _knownLogicalKeys = <int, LogicalKeyboardKey>{
    0x0100000000: none,
    0x0100000010: hyper,
    0x0100000011: superKey,
    0x0100000013: fnLock,
    0x0100000014: suspend,
    0x0100000015: resume,
    0x0100000016: turbo,
    0x0100000017: privacyScreenToggle,
    0x0100010082: sleep,
    0x0100010083: wakeUp,
    0x01000100b5: displayToggleIntExt,
    0x0100070000: usbReserved,
    0x0100070001: usbErrorRollOver,
    0x0100070002: usbPostFail,
    0x0100070003: usbErrorUndefined,
    0x0000000061: keyA,
    0x0000000062: keyB,
    0x0000000063: keyC,
    0x0000000064: keyD,
    0x0000000065: keyE,
    0x0000000066: keyF,
    0x0000000067: keyG,
    0x0000000068: keyH,
    0x0000000069: keyI,
    0x000000006a: keyJ,
    0x000000006b: keyK,
    0x000000006c: keyL,
    0x000000006d: keyM,
    0x000000006e: keyN,
    0x000000006f: keyO,
    0x0000000070: keyP,
    0x0000000071: keyQ,
    0x0000000072: keyR,
    0x0000000073: keyS,
    0x0000000074: keyT,
    0x0000000075: keyU,
    0x0000000076: keyV,
    0x0000000077: keyW,
    0x0000000078: keyX,
    0x0000000079: keyY,
    0x000000007a: keyZ,
    0x0000000031: digit1,
    0x0000000032: digit2,
    0x0000000033: digit3,
    0x0000000034: digit4,
    0x0000000035: digit5,
    0x0000000036: digit6,
    0x0000000037: digit7,
    0x0000000038: digit8,
    0x0000000039: digit9,
    0x0000000030: digit0,
    0x0100070028: enter,
    0x0100070029: escape,
    0x010007002a: backspace,
    0x010007002b: tab,
    0x0000000020: space,
    0x000000002d: minus,
    0x000000003d: equal,
    0x000000005b: bracketLeft,
    0x000000005d: bracketRight,
    0x000000005c: backslash,
    0x000000003b: semicolon,
    0x0000000027: quote,
    0x0000000060: backquote,
    0x000000002c: comma,
    0x000000002e: period,
    0x000000002f: slash,
    0x0100070039: capsLock,
    0x010007003a: f1,
    0x010007003b: f2,
    0x010007003c: f3,
    0x010007003d: f4,
    0x010007003e: f5,
    0x010007003f: f6,
    0x0100070040: f7,
    0x0100070041: f8,
    0x0100070042: f9,
    0x0100070043: f10,
    0x0100070044: f11,
    0x0100070045: f12,
    0x0100070046: printScreen,
    0x0100070047: scrollLock,
    0x0100070048: pause,
    0x0100070049: insert,
    0x010007004a: home,
    0x010007004b: pageUp,
    0x010007004c: delete,
    0x010007004d: end,
    0x010007004e: pageDown,
    0x010007004f: arrowRight,
    0x0100070050: arrowLeft,
    0x0100070051: arrowDown,
    0x0100070052: arrowUp,
    0x0100070053: numLock,
    0x0100070054: numpadDivide,
    0x0100070055: numpadMultiply,
    0x0100070056: numpadSubtract,
    0x0100070057: numpadAdd,
    0x0100070058: numpadEnter,
    0x0100070059: numpad1,
    0x010007005a: numpad2,
    0x010007005b: numpad3,
    0x010007005c: numpad4,
    0x010007005d: numpad5,
    0x010007005e: numpad6,
    0x010007005f: numpad7,
    0x0100070060: numpad8,
    0x0100070061: numpad9,
    0x0100070062: numpad0,
    0x0100070063: numpadDecimal,
    0x0100070064: intlBackslash,
    0x0100070065: contextMenu,
    0x0100070066: power,
    0x0100070067: numpadEqual,
    0x0100070068: f13,
    0x0100070069: f14,
    0x010007006a: f15,
    0x010007006b: f16,
    0x010007006c: f17,
    0x010007006d: f18,
    0x010007006e: f19,
    0x010007006f: f20,
    0x0100070070: f21,
    0x0100070071: f22,
    0x0100070072: f23,
    0x0100070073: f24,
    0x0100070074: open,
    0x0100070075: help,
    0x0100070077: select,
    0x0100070079: again,
    0x010007007a: undo,
    0x010007007b: cut,
    0x010007007c: copy,
    0x010007007d: paste,
    0x010007007e: find,
    0x010007007f: audioVolumeMute,
    0x0100070080: audioVolumeUp,
    0x0100070081: audioVolumeDown,
    0x0100070085: numpadComma,
    0x0100070087: intlRo,
    0x0100070088: kanaMode,
    0x0100070089: intlYen,
    0x010007008a: convert,
    0x010007008b: nonConvert,
    0x0100070090: lang1,
    0x0100070091: lang2,
    0x0100070092: lang3,
    0x0100070093: lang4,
    0x0100070094: lang5,
    0x010007009b: abort,
    0x01000700a3: props,
    0x01000700b6: numpadParenLeft,
    0x01000700b7: numpadParenRight,
    0x01000700bb: numpadBackspace,
    0x01000700d0: numpadMemoryStore,
    0x01000700d1: numpadMemoryRecall,
    0x01000700d2: numpadMemoryClear,
    0x01000700d3: numpadMemoryAdd,
    0x01000700d4: numpadMemorySubtract,
    0x01000700d7: numpadSignChange,
    0x01000700d8: numpadClear,
    0x01000700d9: numpadClearEntry,
    0x01000700e0: controlLeft,
    0x01000700e1: shiftLeft,
    0x01000700e2: altLeft,
    0x01000700e3: metaLeft,
    0x01000700e4: controlRight,
    0x01000700e5: shiftRight,
    0x01000700e6: altRight,
    0x01000700e7: metaRight,
    0x01000c0060: info,
    0x01000c0061: closedCaptionToggle,
    0x01000c006f: brightnessUp,
    0x01000c0070: brightnessDown,
    0x01000c0072: brightnessToggle,
    0x01000c0073: brightnessMinimum,
    0x01000c0074: brightnessMaximum,
    0x01000c0075: brightnessAuto,
    0x01000c0079: kbdIllumUp,
    0x01000c007a: kbdIllumDown,
    0x01000c0083: mediaLast,
    0x01000c008c: launchPhone,
    0x01000c008d: programGuide,
    0x01000c0094: exit,
    0x01000c009c: channelUp,
    0x01000c009d: channelDown,
    0x01000c00b0: mediaPlay,
    0x01000c00b1: mediaPause,
    0x01000c00b2: mediaRecord,
    0x01000c00b3: mediaFastForward,
    0x01000c00b4: mediaRewind,
    0x01000c00b5: mediaTrackNext,
    0x01000c00b6: mediaTrackPrevious,
    0x01000c00b7: mediaStop,
    0x01000c00b8: eject,
    0x01000c00cd: mediaPlayPause,
    0x01000c00cf: speechInputToggle,
    0x01000c00e5: bassBoost,
    0x01000c0183: mediaSelect,
    0x01000c0184: launchWordProcessor,
    0x01000c0186: launchSpreadsheet,
    0x01000c018a: launchMail,
    0x01000c018d: launchContacts,
    0x01000c018e: launchCalendar,
    0x01000c0192: launchApp2,
    0x01000c0194: launchApp1,
    0x01000c0196: launchInternetBrowser,
    0x01000c019c: logOff,
    0x01000c019e: lockScreen,
    0x01000c019f: launchControlPanel,
    0x01000c01a2: selectTask,
    0x01000c01a7: launchDocuments,
    0x01000c01ab: spellCheck,
    0x01000c01ae: launchKeyboardLayout,
    0x01000c01b1: launchScreenSaver,
    0x01000c01cb: launchAssistant,
    0x01000c01b7: launchAudioBrowser,
    0x01000c0201: newKey,
    0x01000c0203: close,
    0x01000c0207: save,
    0x01000c0208: print,
    0x01000c0221: browserSearch,
    0x01000c0223: browserHome,
    0x01000c0224: browserBack,
    0x01000c0225: browserForward,
    0x01000c0226: browserStop,
    0x01000c0227: browserRefresh,
    0x01000c022a: browserFavorites,
    0x01000c022d: zoomIn,
    0x01000c022e: zoomOut,
    0x01000c0232: zoomToggle,
    0x01000c0279: redo,
    0x01000c0289: mailReply,
    0x01000c028b: mailForward,
    0x01000c028c: mailSend,
    0x01000c029d: keyboardLayoutSelect,
    0x01000c029f: showAllWindows,
    0x010005ff01: gameButton1,
    0x010005ff02: gameButton2,
    0x010005ff03: gameButton3,
    0x010005ff04: gameButton4,
    0x010005ff05: gameButton5,
    0x010005ff06: gameButton6,
    0x010005ff07: gameButton7,
    0x010005ff08: gameButton8,
    0x010005ff09: gameButton9,
    0x010005ff0a: gameButton10,
    0x010005ff0b: gameButton11,
    0x010005ff0c: gameButton12,
    0x010005ff0d: gameButton13,
    0x010005ff0e: gameButton14,
    0x010005ff0f: gameButton15,
    0x010005ff10: gameButton16,
    0x010005ff11: gameButtonA,
    0x010005ff12: gameButtonB,
    0x010005ff13: gameButtonC,
    0x010005ff14: gameButtonLeft1,
    0x010005ff15: gameButtonLeft2,
    0x010005ff16: gameButtonMode,
    0x010005ff17: gameButtonRight1,
    0x010005ff18: gameButtonRight2,
    0x010005ff19: gameButtonSelect,
    0x010005ff1a: gameButtonStart,
    0x010005ff1b: gameButtonThumbLeft,
    0x010005ff1c: gameButtonThumbRight,
    0x010005ff1d: gameButtonX,
    0x010005ff1e: gameButtonY,
    0x010005ff1f: gameButtonZ,
    0x0100000012: fn,
    0x201000700e1: shift,
    0x201000700e3: meta,
    0x201000700e2: alt,
    0x201000700e0: control,
  };

  // A map of keys to the pseudo-key synonym for that key. Used by getSynonyms.
  static final Map<LogicalKeyboardKey, LogicalKeyboardKey> _synonyms = <LogicalKeyboardKey, LogicalKeyboardKey>{
    shiftLeft: shift,
    shiftRight: shift,
    metaLeft: meta,
    metaRight: meta,
    altLeft: alt,
    altRight: alt,
    controlLeft: control,
    controlRight: control,
  };

  static const Map<int, String> _keyLabels = <int, String>{
    0x00100000000: 'None',
    0x00100000010: 'Hyper',
    0x00100000011: 'Super Key',
    0x00100000013: 'Fn Lock',
    0x00100000014: 'Suspend',
    0x00100000015: 'Resume',
    0x00100000016: 'Turbo',
    0x00100000017: 'Privacy Screen Toggle',
    0x00100010082: 'Sleep',
    0x00100010083: 'Wake Up',
    0x001000100b5: 'Display Toggle Int Ext',
    0x00100070000: 'Usb Reserved',
    0x00100070001: 'Usb Error Roll Over',
    0x00100070002: 'Usb Post Fail',
    0x00100070003: 'Usb Error Undefined',
    0x00000000061: 'Key A',
    0x00000000062: 'Key B',
    0x00000000063: 'Key C',
    0x00000000064: 'Key D',
    0x00000000065: 'Key E',
    0x00000000066: 'Key F',
    0x00000000067: 'Key G',
    0x00000000068: 'Key H',
    0x00000000069: 'Key I',
    0x0000000006a: 'Key J',
    0x0000000006b: 'Key K',
    0x0000000006c: 'Key L',
    0x0000000006d: 'Key M',
    0x0000000006e: 'Key N',
    0x0000000006f: 'Key O',
    0x00000000070: 'Key P',
    0x00000000071: 'Key Q',
    0x00000000072: 'Key R',
    0x00000000073: 'Key S',
    0x00000000074: 'Key T',
    0x00000000075: 'Key U',
    0x00000000076: 'Key V',
    0x00000000077: 'Key W',
    0x00000000078: 'Key X',
    0x00000000079: 'Key Y',
    0x0000000007a: 'Key Z',
    0x00000000031: 'Digit 1',
    0x00000000032: 'Digit 2',
    0x00000000033: 'Digit 3',
    0x00000000034: 'Digit 4',
    0x00000000035: 'Digit 5',
    0x00000000036: 'Digit 6',
    0x00000000037: 'Digit 7',
    0x00000000038: 'Digit 8',
    0x00000000039: 'Digit 9',
    0x00000000030: 'Digit 0',
    0x00100070028: 'Enter',
    0x00100070029: 'Escape',
    0x0010007002a: 'Backspace',
    0x0010007002b: 'Tab',
    0x00000000020: 'Space',
    0x0000000002d: 'Minus',
    0x0000000003d: 'Equal',
    0x0000000005b: 'Bracket Left',
    0x0000000005d: 'Bracket Right',
    0x0000000005c: 'Backslash',
    0x0000000003b: 'Semicolon',
    0x00000000027: 'Quote',
    0x00000000060: 'Backquote',
    0x0000000002c: 'Comma',
    0x0000000002e: 'Period',
    0x0000000002f: 'Slash',
    0x00100070039: 'Caps Lock',
    0x0010007003a: 'F1',
    0x0010007003b: 'F2',
    0x0010007003c: 'F3',
    0x0010007003d: 'F4',
    0x0010007003e: 'F5',
    0x0010007003f: 'F6',
    0x00100070040: 'F7',
    0x00100070041: 'F8',
    0x00100070042: 'F9',
    0x00100070043: 'F10',
    0x00100070044: 'F11',
    0x00100070045: 'F12',
    0x00100070046: 'Print Screen',
    0x00100070047: 'Scroll Lock',
    0x00100070048: 'Pause',
    0x00100070049: 'Insert',
    0x0010007004a: 'Home',
    0x0010007004b: 'Page Up',
    0x0010007004c: 'Delete',
    0x0010007004d: 'End',
    0x0010007004e: 'Page Down',
    0x0010007004f: 'Arrow Right',
    0x00100070050: 'Arrow Left',
    0x00100070051: 'Arrow Down',
    0x00100070052: 'Arrow Up',
    0x00100070053: 'Num Lock',
    0x00100070054: 'Numpad Divide',
    0x00100070055: 'Numpad Multiply',
    0x00100070056: 'Numpad Subtract',
    0x00100070057: 'Numpad Add',
    0x00100070058: 'Numpad Enter',
    0x00100070059: 'Numpad 1',
    0x0010007005a: 'Numpad 2',
    0x0010007005b: 'Numpad 3',
    0x0010007005c: 'Numpad 4',
    0x0010007005d: 'Numpad 5',
    0x0010007005e: 'Numpad 6',
    0x0010007005f: 'Numpad 7',
    0x00100070060: 'Numpad 8',
    0x00100070061: 'Numpad 9',
    0x00100070062: 'Numpad 0',
    0x00100070063: 'Numpad Decimal',
    0x00100070064: 'Intl Backslash',
    0x00100070065: 'Context Menu',
    0x00100070066: 'Power',
    0x00100070067: 'Numpad Equal',
    0x00100070068: 'F13',
    0x00100070069: 'F14',
    0x0010007006a: 'F15',
    0x0010007006b: 'F16',
    0x0010007006c: 'F17',
    0x0010007006d: 'F18',
    0x0010007006e: 'F19',
    0x0010007006f: 'F20',
    0x00100070070: 'F21',
    0x00100070071: 'F22',
    0x00100070072: 'F23',
    0x00100070073: 'F24',
    0x00100070074: 'Open',
    0x00100070075: 'Help',
    0x00100070077: 'Select',
    0x00100070079: 'Again',
    0x0010007007a: 'Undo',
    0x0010007007b: 'Cut',
    0x0010007007c: 'Copy',
    0x0010007007d: 'Paste',
    0x0010007007e: 'Find',
    0x0010007007f: 'Audio Volume Mute',
    0x00100070080: 'Audio Volume Up',
    0x00100070081: 'Audio Volume Down',
    0x00100070085: 'Numpad Comma',
    0x00100070087: 'Intl Ro',
    0x00100070088: 'Kana Mode',
    0x00100070089: 'Intl Yen',
    0x0010007008a: 'Convert',
    0x0010007008b: 'Non Convert',
    0x00100070090: 'Lang 1',
    0x00100070091: 'Lang 2',
    0x00100070092: 'Lang 3',
    0x00100070093: 'Lang 4',
    0x00100070094: 'Lang 5',
    0x0010007009b: 'Abort',
    0x001000700a3: 'Props',
    0x001000700b6: 'Numpad Paren Left',
    0x001000700b7: 'Numpad Paren Right',
    0x001000700bb: 'Numpad Backspace',
    0x001000700d0: 'Numpad Memory Store',
    0x001000700d1: 'Numpad Memory Recall',
    0x001000700d2: 'Numpad Memory Clear',
    0x001000700d3: 'Numpad Memory Add',
    0x001000700d4: 'Numpad Memory Subtract',
    0x001000700d7: 'Numpad Sign Change',
    0x001000700d8: 'Numpad Clear',
    0x001000700d9: 'Numpad Clear Entry',
    0x001000700e0: 'Control Left',
    0x001000700e1: 'Shift Left',
    0x001000700e2: 'Alt Left',
    0x001000700e3: 'Meta Left',
    0x001000700e4: 'Control Right',
    0x001000700e5: 'Shift Right',
    0x001000700e6: 'Alt Right',
    0x001000700e7: 'Meta Right',
    0x001000c0060: 'Info',
    0x001000c0061: 'Closed Caption Toggle',
    0x001000c006f: 'Brightness Up',
    0x001000c0070: 'Brightness Down',
    0x001000c0072: 'Brightness Toggle',
    0x001000c0073: 'Brightness Minimum',
    0x001000c0074: 'Brightness Maximum',
    0x001000c0075: 'Brightness Auto',
    0x001000c0079: 'Kbd Illum Up',
    0x001000c007a: 'Kbd Illum Down',
    0x001000c0083: 'Media Last',
    0x001000c008c: 'Launch Phone',
    0x001000c008d: 'Program Guide',
    0x001000c0094: 'Exit',
    0x001000c009c: 'Channel Up',
    0x001000c009d: 'Channel Down',
    0x001000c00b0: 'Media Play',
    0x001000c00b1: 'Media Pause',
    0x001000c00b2: 'Media Record',
    0x001000c00b3: 'Media Fast Forward',
    0x001000c00b4: 'Media Rewind',
    0x001000c00b5: 'Media Track Next',
    0x001000c00b6: 'Media Track Previous',
    0x001000c00b7: 'Media Stop',
    0x001000c00b8: 'Eject',
    0x001000c00cd: 'Media Play Pause',
    0x001000c00cf: 'Speech Input Toggle',
    0x001000c00e5: 'Bass Boost',
    0x001000c0183: 'Media Select',
    0x001000c0184: 'Launch Word Processor',
    0x001000c0186: 'Launch Spreadsheet',
    0x001000c018a: 'Launch Mail',
    0x001000c018d: 'Launch Contacts',
    0x001000c018e: 'Launch Calendar',
    0x001000c0192: 'Launch App2',
    0x001000c0194: 'Launch App1',
    0x001000c0196: 'Launch Internet Browser',
    0x001000c019c: 'Log Off',
    0x001000c019e: 'Lock Screen',
    0x001000c019f: 'Launch Control Panel',
    0x001000c01a2: 'Select Task',
    0x001000c01a7: 'Launch Documents',
    0x001000c01ab: 'Spell Check',
    0x001000c01ae: 'Launch Keyboard Layout',
    0x001000c01b1: 'Launch Screen Saver',
    0x001000c01cb: 'Launch Assistant',
    0x001000c01b7: 'Launch Audio Browser',
    0x001000c0201: 'New Key',
    0x001000c0203: 'Close',
    0x001000c0207: 'Save',
    0x001000c0208: 'Print',
    0x001000c0221: 'Browser Search',
    0x001000c0223: 'Browser Home',
    0x001000c0224: 'Browser Back',
    0x001000c0225: 'Browser Forward',
    0x001000c0226: 'Browser Stop',
    0x001000c0227: 'Browser Refresh',
    0x001000c022a: 'Browser Favorites',
    0x001000c022d: 'Zoom In',
    0x001000c022e: 'Zoom Out',
    0x001000c0232: 'Zoom Toggle',
    0x001000c0279: 'Redo',
    0x001000c0289: 'Mail Reply',
    0x001000c028b: 'Mail Forward',
    0x001000c028c: 'Mail Send',
    0x001000c029d: 'Keyboard Layout Select',
    0x001000c029f: 'Show All Windows',
    0x0010005ff01: 'Game Button 1',
    0x0010005ff02: 'Game Button 2',
    0x0010005ff03: 'Game Button 3',
    0x0010005ff04: 'Game Button 4',
    0x0010005ff05: 'Game Button 5',
    0x0010005ff06: 'Game Button 6',
    0x0010005ff07: 'Game Button 7',
    0x0010005ff08: 'Game Button 8',
    0x0010005ff09: 'Game Button 9',
    0x0010005ff0a: 'Game Button 10',
    0x0010005ff0b: 'Game Button 11',
    0x0010005ff0c: 'Game Button 12',
    0x0010005ff0d: 'Game Button 13',
    0x0010005ff0e: 'Game Button 14',
    0x0010005ff0f: 'Game Button 15',
    0x0010005ff10: 'Game Button 16',
    0x0010005ff11: 'Game Button A',
    0x0010005ff12: 'Game Button B',
    0x0010005ff13: 'Game Button C',
    0x0010005ff14: 'Game Button Left 1',
    0x0010005ff15: 'Game Button Left 2',
    0x0010005ff16: 'Game Button Mode',
    0x0010005ff17: 'Game Button Right 1',
    0x0010005ff18: 'Game Button Right 2',
    0x0010005ff19: 'Game Button Select',
    0x0010005ff1a: 'Game Button Start',
    0x0010005ff1b: 'Game Button Thumb Left',
    0x0010005ff1c: 'Game Button Thumb Right',
    0x0010005ff1d: 'Game Button X',
    0x0010005ff1e: 'Game Button Y',
    0x0010005ff1f: 'Game Button Z',
    0x00100000012: 'Fn',
    0x201000700e1: 'Shift',
    0x201000700e3: 'Meta',
    0x201000700e2: 'Alt',
    0x201000700e0: 'Control',
    };
}

/// A class with static values that describe the keys that are returned from
/// [RawKeyEvent.physicalKey].
///
/// These represent *physical* keys, which are keys which represent a particular
/// key location on a QWERTY keyboard. It ignores any modifiers, modes, or
/// keyboard layouts which may be in effect. This is contrast to
/// [LogicalKeyboardKey], which represents a logical key interpreted in the
/// context of modifiers, modes, and/or keyboard layouts.
///
/// As an example, if you wanted a game where the key next to the CAPS LOCK (the
/// "A" key on a QWERTY keyboard) moved the player to the left, you'd want to
/// look at the physical key to make sure that regardless of the character the
/// key produces, you got the key that is in that location on the keyboard.
///
/// Conversely, if you wanted to implement an app where the "Q" key "quit"
/// something, you'd want to look at the logical key to detect this, since you
/// would like to have it match the key with "Q" on it, instead of always
/// looking for "the key next next to the TAB key", since on a French keyboard,
/// the key next to the TAB key has an "A" on it.
///
/// {@tool dartpad --template=stateful_widget_scaffold}
/// This example shows how to detect if the user has selected the physical key
/// to the right of the CAPS LOCK key.
///
/// ```dart imports
/// import 'package:flutter/services.dart';
/// ```
///
/// ```dart
/// // The node used to request the keyboard focus.
/// final FocusNode _focusNode = FocusNode();
/// // The message to display.
/// String? _message;
///
/// // Focus nodes need to be disposed.
/// @override
/// void dispose() {
///   _focusNode.dispose();
///   super.dispose();
/// }
///
/// // Handles the key events from the RawKeyboardListener and update the
/// // _message.
/// void _handleKeyEvent(RawKeyEvent event) {
///   setState(() {
///     if (event.physicalKey == PhysicalKeyboardKey.keyA) {
///       _message = 'Pressed the key next to CAPS LOCK!';
///     } else {
///       _message = 'Wrong key.';
///     }
///   });
/// }
///
/// @override
/// Widget build(BuildContext context) {
///   final TextTheme textTheme = Theme.of(context).textTheme;
///   return Container(
///     color: Colors.white,
///     alignment: Alignment.center,
///     child: DefaultTextStyle(
///       style: textTheme.headline4!,
///       child: RawKeyboardListener(
///         focusNode: _focusNode,
///         onKey: _handleKeyEvent,
///         child: AnimatedBuilder(
///           animation: _focusNode,
///           builder: (BuildContext context, Widget? child) {
///             if (!_focusNode.hasFocus) {
///               return GestureDetector(
///                 onTap: () {
///                   FocusScope.of(context).requestFocus(_focusNode);
///                 },
///                 child: const Text('Tap to focus'),
///               );
///             }
///             return Text(_message ?? 'Press a key');
///           },
///         ),
///       ),
///     ),
///   );
/// }
/// ```
/// {@end-tool}
///
/// See also:
///
///  * [RawKeyEvent], the keyboard event object received by widgets that listen
///    to keyboard events.
///  * [RawKeyboardListener], a widget used to listen to and supply handlers for
///    keyboard events.
@immutable
class PhysicalKeyboardKey extends KeyboardKey {
  /// Creates a new PhysicalKeyboardKey object for a USB HID usage.
  const PhysicalKeyboardKey(this.usbHidUsage);

  /// The unique USB HID usage ID of this physical key on the keyboard.
  ///
  /// Due to the variations in platform APIs, this may not be the actual HID
  /// usage code from the hardware, but a value derived from available
  /// information on the platform.
  ///
  /// See <https://www.usb.org/sites/default/files/documents/hut1_12v2.pdf>
  /// for the HID usage values and their meanings.
  final int usbHidUsage;

  /// The debug string to print for this keyboard key, which will be null in
  /// release mode.
  String? get debugName {
    String? result;
    assert(() {
      result = _debugNames[usbHidUsage] ??
        'Key with ID 0x${usbHidUsage.toRadixString(16).padLeft(8, '0')}';
      return true;
    }());
    return result;
  }

  @override
  int get hashCode => usbHidUsage.hashCode;

  @override
  bool operator ==(Object other) {
    if (identical(this, other))
      return true;
    if (other.runtimeType != runtimeType)
      return false;
    return other is PhysicalKeyboardKey
        && other.usbHidUsage == usbHidUsage;
  }

  /// Finds a known [PhysicalKeyboardKey] that matches the given USB HID usage
  /// code.
  static PhysicalKeyboardKey? findKeyByCode(int usageCode) => _knownPhysicalKeys[usageCode];

  @override
  void debugFillProperties(DiagnosticPropertiesBuilder properties) {
    super.debugFillProperties(properties);
    properties.add(StringProperty('usbHidUsage', '0x${usbHidUsage.toRadixString(16).padLeft(8, '0')}', showName: true));
    properties.add(StringProperty('debugName', debugName, showName: true, defaultValue: null));
  }

  // Key constants for all keyboard keys in the USB HID specification at the
  // time Flutter was built.

  /// Represents the location of the "None" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey none = PhysicalKeyboardKey(0x00000000);

  /// Represents the location of the "Hyper" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey hyper = PhysicalKeyboardKey(0x00000010);

  /// Represents the location of the "Super Key" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey superKey = PhysicalKeyboardKey(0x00000011);

  /// Represents the location of the "Fn Lock" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey fnLock = PhysicalKeyboardKey(0x00000013);

  /// Represents the location of the "Suspend" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey suspend = PhysicalKeyboardKey(0x00000014);

  /// Represents the location of the "Resume" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey resume = PhysicalKeyboardKey(0x00000015);

  /// Represents the location of the "Turbo" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey turbo = PhysicalKeyboardKey(0x00000016);

  /// Represents the location of the "Privacy Screen Toggle" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey privacyScreenToggle = PhysicalKeyboardKey(0x00000017);

  /// Represents the location of the "Sleep" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey sleep = PhysicalKeyboardKey(0x00010082);

  /// Represents the location of the "Wake Up" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey wakeUp = PhysicalKeyboardKey(0x00010083);

  /// Represents the location of the "Display Toggle Int Ext" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey displayToggleIntExt = PhysicalKeyboardKey(0x000100b5);

  /// Represents the location of the "Usb Reserved" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey usbReserved = PhysicalKeyboardKey(0x00070000);

  /// Represents the location of the "Usb Error Roll Over" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey usbErrorRollOver = PhysicalKeyboardKey(0x00070001);

  /// Represents the location of the "Usb Post Fail" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey usbPostFail = PhysicalKeyboardKey(0x00070002);

  /// Represents the location of the "Usb Error Undefined" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey usbErrorUndefined = PhysicalKeyboardKey(0x00070003);

  /// Represents the location of the "Key A" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyA = PhysicalKeyboardKey(0x00070004);

  /// Represents the location of the "Key B" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyB = PhysicalKeyboardKey(0x00070005);

  /// Represents the location of the "Key C" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyC = PhysicalKeyboardKey(0x00070006);

  /// Represents the location of the "Key D" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyD = PhysicalKeyboardKey(0x00070007);

  /// Represents the location of the "Key E" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyE = PhysicalKeyboardKey(0x00070008);

  /// Represents the location of the "Key F" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyF = PhysicalKeyboardKey(0x00070009);

  /// Represents the location of the "Key G" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyG = PhysicalKeyboardKey(0x0007000a);

  /// Represents the location of the "Key H" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyH = PhysicalKeyboardKey(0x0007000b);

  /// Represents the location of the "Key I" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyI = PhysicalKeyboardKey(0x0007000c);

  /// Represents the location of the "Key J" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyJ = PhysicalKeyboardKey(0x0007000d);

  /// Represents the location of the "Key K" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyK = PhysicalKeyboardKey(0x0007000e);

  /// Represents the location of the "Key L" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyL = PhysicalKeyboardKey(0x0007000f);

  /// Represents the location of the "Key M" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyM = PhysicalKeyboardKey(0x00070010);

  /// Represents the location of the "Key N" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyN = PhysicalKeyboardKey(0x00070011);

  /// Represents the location of the "Key O" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyO = PhysicalKeyboardKey(0x00070012);

  /// Represents the location of the "Key P" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyP = PhysicalKeyboardKey(0x00070013);

  /// Represents the location of the "Key Q" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyQ = PhysicalKeyboardKey(0x00070014);

  /// Represents the location of the "Key R" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyR = PhysicalKeyboardKey(0x00070015);

  /// Represents the location of the "Key S" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyS = PhysicalKeyboardKey(0x00070016);

  /// Represents the location of the "Key T" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyT = PhysicalKeyboardKey(0x00070017);

  /// Represents the location of the "Key U" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyU = PhysicalKeyboardKey(0x00070018);

  /// Represents the location of the "Key V" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyV = PhysicalKeyboardKey(0x00070019);

  /// Represents the location of the "Key W" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyW = PhysicalKeyboardKey(0x0007001a);

  /// Represents the location of the "Key X" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyX = PhysicalKeyboardKey(0x0007001b);

  /// Represents the location of the "Key Y" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyY = PhysicalKeyboardKey(0x0007001c);

  /// Represents the location of the "Key Z" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyZ = PhysicalKeyboardKey(0x0007001d);

  /// Represents the location of the "Digit 1" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit1 = PhysicalKeyboardKey(0x0007001e);

  /// Represents the location of the "Digit 2" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit2 = PhysicalKeyboardKey(0x0007001f);

  /// Represents the location of the "Digit 3" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit3 = PhysicalKeyboardKey(0x00070020);

  /// Represents the location of the "Digit 4" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit4 = PhysicalKeyboardKey(0x00070021);

  /// Represents the location of the "Digit 5" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit5 = PhysicalKeyboardKey(0x00070022);

  /// Represents the location of the "Digit 6" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit6 = PhysicalKeyboardKey(0x00070023);

  /// Represents the location of the "Digit 7" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit7 = PhysicalKeyboardKey(0x00070024);

  /// Represents the location of the "Digit 8" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit8 = PhysicalKeyboardKey(0x00070025);

  /// Represents the location of the "Digit 9" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit9 = PhysicalKeyboardKey(0x00070026);

  /// Represents the location of the "Digit 0" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey digit0 = PhysicalKeyboardKey(0x00070027);

  /// Represents the location of the "Enter" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey enter = PhysicalKeyboardKey(0x00070028);

  /// Represents the location of the "Escape" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey escape = PhysicalKeyboardKey(0x00070029);

  /// Represents the location of the "Backspace" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey backspace = PhysicalKeyboardKey(0x0007002a);

  /// Represents the location of the "Tab" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey tab = PhysicalKeyboardKey(0x0007002b);

  /// Represents the location of the "Space" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey space = PhysicalKeyboardKey(0x0007002c);

  /// Represents the location of the "Minus" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey minus = PhysicalKeyboardKey(0x0007002d);

  /// Represents the location of the "Equal" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey equal = PhysicalKeyboardKey(0x0007002e);

  /// Represents the location of the "Bracket Left" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey bracketLeft = PhysicalKeyboardKey(0x0007002f);

  /// Represents the location of the "Bracket Right" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey bracketRight = PhysicalKeyboardKey(0x00070030);

  /// Represents the location of the "Backslash" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey backslash = PhysicalKeyboardKey(0x00070031);

  /// Represents the location of the "Semicolon" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey semicolon = PhysicalKeyboardKey(0x00070033);

  /// Represents the location of the "Quote" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey quote = PhysicalKeyboardKey(0x00070034);

  /// Represents the location of the "Backquote" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey backquote = PhysicalKeyboardKey(0x00070035);

  /// Represents the location of the "Comma" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey comma = PhysicalKeyboardKey(0x00070036);

  /// Represents the location of the "Period" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey period = PhysicalKeyboardKey(0x00070037);

  /// Represents the location of the "Slash" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey slash = PhysicalKeyboardKey(0x00070038);

  /// Represents the location of the "Caps Lock" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey capsLock = PhysicalKeyboardKey(0x00070039);

  /// Represents the location of the "F1" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f1 = PhysicalKeyboardKey(0x0007003a);

  /// Represents the location of the "F2" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f2 = PhysicalKeyboardKey(0x0007003b);

  /// Represents the location of the "F3" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f3 = PhysicalKeyboardKey(0x0007003c);

  /// Represents the location of the "F4" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f4 = PhysicalKeyboardKey(0x0007003d);

  /// Represents the location of the "F5" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f5 = PhysicalKeyboardKey(0x0007003e);

  /// Represents the location of the "F6" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f6 = PhysicalKeyboardKey(0x0007003f);

  /// Represents the location of the "F7" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f7 = PhysicalKeyboardKey(0x00070040);

  /// Represents the location of the "F8" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f8 = PhysicalKeyboardKey(0x00070041);

  /// Represents the location of the "F9" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f9 = PhysicalKeyboardKey(0x00070042);

  /// Represents the location of the "F10" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f10 = PhysicalKeyboardKey(0x00070043);

  /// Represents the location of the "F11" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f11 = PhysicalKeyboardKey(0x00070044);

  /// Represents the location of the "F12" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f12 = PhysicalKeyboardKey(0x00070045);

  /// Represents the location of the "Print Screen" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey printScreen = PhysicalKeyboardKey(0x00070046);

  /// Represents the location of the "Scroll Lock" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey scrollLock = PhysicalKeyboardKey(0x00070047);

  /// Represents the location of the "Pause" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey pause = PhysicalKeyboardKey(0x00070048);

  /// Represents the location of the "Insert" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey insert = PhysicalKeyboardKey(0x00070049);

  /// Represents the location of the "Home" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey home = PhysicalKeyboardKey(0x0007004a);

  /// Represents the location of the "Page Up" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey pageUp = PhysicalKeyboardKey(0x0007004b);

  /// Represents the location of the "Delete" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey delete = PhysicalKeyboardKey(0x0007004c);

  /// Represents the location of the "End" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey end = PhysicalKeyboardKey(0x0007004d);

  /// Represents the location of the "Page Down" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey pageDown = PhysicalKeyboardKey(0x0007004e);

  /// Represents the location of the "Arrow Right" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey arrowRight = PhysicalKeyboardKey(0x0007004f);

  /// Represents the location of the "Arrow Left" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey arrowLeft = PhysicalKeyboardKey(0x00070050);

  /// Represents the location of the "Arrow Down" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey arrowDown = PhysicalKeyboardKey(0x00070051);

  /// Represents the location of the "Arrow Up" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey arrowUp = PhysicalKeyboardKey(0x00070052);

  /// Represents the location of the "Num Lock" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numLock = PhysicalKeyboardKey(0x00070053);

  /// Represents the location of the "Numpad Divide" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadDivide = PhysicalKeyboardKey(0x00070054);

  /// Represents the location of the "Numpad Multiply" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadMultiply = PhysicalKeyboardKey(0x00070055);

  /// Represents the location of the "Numpad Subtract" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadSubtract = PhysicalKeyboardKey(0x00070056);

  /// Represents the location of the "Numpad Add" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadAdd = PhysicalKeyboardKey(0x00070057);

  /// Represents the location of the "Numpad Enter" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadEnter = PhysicalKeyboardKey(0x00070058);

  /// Represents the location of the "Numpad 1" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad1 = PhysicalKeyboardKey(0x00070059);

  /// Represents the location of the "Numpad 2" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad2 = PhysicalKeyboardKey(0x0007005a);

  /// Represents the location of the "Numpad 3" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad3 = PhysicalKeyboardKey(0x0007005b);

  /// Represents the location of the "Numpad 4" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad4 = PhysicalKeyboardKey(0x0007005c);

  /// Represents the location of the "Numpad 5" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad5 = PhysicalKeyboardKey(0x0007005d);

  /// Represents the location of the "Numpad 6" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad6 = PhysicalKeyboardKey(0x0007005e);

  /// Represents the location of the "Numpad 7" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad7 = PhysicalKeyboardKey(0x0007005f);

  /// Represents the location of the "Numpad 8" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad8 = PhysicalKeyboardKey(0x00070060);

  /// Represents the location of the "Numpad 9" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad9 = PhysicalKeyboardKey(0x00070061);

  /// Represents the location of the "Numpad 0" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpad0 = PhysicalKeyboardKey(0x00070062);

  /// Represents the location of the "Numpad Decimal" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadDecimal = PhysicalKeyboardKey(0x00070063);

  /// Represents the location of the "Intl Backslash" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey intlBackslash = PhysicalKeyboardKey(0x00070064);

  /// Represents the location of the "Context Menu" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey contextMenu = PhysicalKeyboardKey(0x00070065);

  /// Represents the location of the "Power" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey power = PhysicalKeyboardKey(0x00070066);

  /// Represents the location of the "Numpad Equal" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadEqual = PhysicalKeyboardKey(0x00070067);

  /// Represents the location of the "F13" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f13 = PhysicalKeyboardKey(0x00070068);

  /// Represents the location of the "F14" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f14 = PhysicalKeyboardKey(0x00070069);

  /// Represents the location of the "F15" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f15 = PhysicalKeyboardKey(0x0007006a);

  /// Represents the location of the "F16" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f16 = PhysicalKeyboardKey(0x0007006b);

  /// Represents the location of the "F17" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f17 = PhysicalKeyboardKey(0x0007006c);

  /// Represents the location of the "F18" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f18 = PhysicalKeyboardKey(0x0007006d);

  /// Represents the location of the "F19" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f19 = PhysicalKeyboardKey(0x0007006e);

  /// Represents the location of the "F20" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f20 = PhysicalKeyboardKey(0x0007006f);

  /// Represents the location of the "F21" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f21 = PhysicalKeyboardKey(0x00070070);

  /// Represents the location of the "F22" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f22 = PhysicalKeyboardKey(0x00070071);

  /// Represents the location of the "F23" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f23 = PhysicalKeyboardKey(0x00070072);

  /// Represents the location of the "F24" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey f24 = PhysicalKeyboardKey(0x00070073);

  /// Represents the location of the "Open" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey open = PhysicalKeyboardKey(0x00070074);

  /// Represents the location of the "Help" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey help = PhysicalKeyboardKey(0x00070075);

  /// Represents the location of the "Select" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey select = PhysicalKeyboardKey(0x00070077);

  /// Represents the location of the "Again" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey again = PhysicalKeyboardKey(0x00070079);

  /// Represents the location of the "Undo" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey undo = PhysicalKeyboardKey(0x0007007a);

  /// Represents the location of the "Cut" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey cut = PhysicalKeyboardKey(0x0007007b);

  /// Represents the location of the "Copy" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey copy = PhysicalKeyboardKey(0x0007007c);

  /// Represents the location of the "Paste" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey paste = PhysicalKeyboardKey(0x0007007d);

  /// Represents the location of the "Find" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey find = PhysicalKeyboardKey(0x0007007e);

  /// Represents the location of the "Audio Volume Mute" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey audioVolumeMute = PhysicalKeyboardKey(0x0007007f);

  /// Represents the location of the "Audio Volume Up" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey audioVolumeUp = PhysicalKeyboardKey(0x00070080);

  /// Represents the location of the "Audio Volume Down" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey audioVolumeDown = PhysicalKeyboardKey(0x00070081);

  /// Represents the location of the "Numpad Comma" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadComma = PhysicalKeyboardKey(0x00070085);

  /// Represents the location of the "Intl Ro" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey intlRo = PhysicalKeyboardKey(0x00070087);

  /// Represents the location of the "Kana Mode" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey kanaMode = PhysicalKeyboardKey(0x00070088);

  /// Represents the location of the "Intl Yen" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey intlYen = PhysicalKeyboardKey(0x00070089);

  /// Represents the location of the "Convert" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey convert = PhysicalKeyboardKey(0x0007008a);

  /// Represents the location of the "Non Convert" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey nonConvert = PhysicalKeyboardKey(0x0007008b);

  /// Represents the location of the "Lang 1" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey lang1 = PhysicalKeyboardKey(0x00070090);

  /// Represents the location of the "Lang 2" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey lang2 = PhysicalKeyboardKey(0x00070091);

  /// Represents the location of the "Lang 3" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey lang3 = PhysicalKeyboardKey(0x00070092);

  /// Represents the location of the "Lang 4" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey lang4 = PhysicalKeyboardKey(0x00070093);

  /// Represents the location of the "Lang 5" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey lang5 = PhysicalKeyboardKey(0x00070094);

  /// Represents the location of the "Abort" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey abort = PhysicalKeyboardKey(0x0007009b);

  /// Represents the location of the "Props" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey props = PhysicalKeyboardKey(0x000700a3);

  /// Represents the location of the "Numpad Paren Left" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadParenLeft = PhysicalKeyboardKey(0x000700b6);

  /// Represents the location of the "Numpad Paren Right" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadParenRight = PhysicalKeyboardKey(0x000700b7);

  /// Represents the location of the "Numpad Backspace" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadBackspace = PhysicalKeyboardKey(0x000700bb);

  /// Represents the location of the "Numpad Memory Store" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadMemoryStore = PhysicalKeyboardKey(0x000700d0);

  /// Represents the location of the "Numpad Memory Recall" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadMemoryRecall = PhysicalKeyboardKey(0x000700d1);

  /// Represents the location of the "Numpad Memory Clear" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadMemoryClear = PhysicalKeyboardKey(0x000700d2);

  /// Represents the location of the "Numpad Memory Add" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadMemoryAdd = PhysicalKeyboardKey(0x000700d3);

  /// Represents the location of the "Numpad Memory Subtract" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadMemorySubtract = PhysicalKeyboardKey(0x000700d4);

  /// Represents the location of the "Numpad Sign Change" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadSignChange = PhysicalKeyboardKey(0x000700d7);

  /// Represents the location of the "Numpad Clear" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadClear = PhysicalKeyboardKey(0x000700d8);

  /// Represents the location of the "Numpad Clear Entry" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey numpadClearEntry = PhysicalKeyboardKey(0x000700d9);

  /// Represents the location of the "Control Left" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey controlLeft = PhysicalKeyboardKey(0x000700e0);

  /// Represents the location of the "Shift Left" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey shiftLeft = PhysicalKeyboardKey(0x000700e1);

  /// Represents the location of the "Alt Left" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey altLeft = PhysicalKeyboardKey(0x000700e2);

  /// Represents the location of the "Meta Left" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey metaLeft = PhysicalKeyboardKey(0x000700e3);

  /// Represents the location of the "Control Right" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey controlRight = PhysicalKeyboardKey(0x000700e4);

  /// Represents the location of the "Shift Right" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey shiftRight = PhysicalKeyboardKey(0x000700e5);

  /// Represents the location of the "Alt Right" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey altRight = PhysicalKeyboardKey(0x000700e6);

  /// Represents the location of the "Meta Right" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey metaRight = PhysicalKeyboardKey(0x000700e7);

  /// Represents the location of the "Info" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey info = PhysicalKeyboardKey(0x000c0060);

  /// Represents the location of the "Closed Caption Toggle" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey closedCaptionToggle = PhysicalKeyboardKey(0x000c0061);

  /// Represents the location of the "Brightness Up" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey brightnessUp = PhysicalKeyboardKey(0x000c006f);

  /// Represents the location of the "Brightness Down" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey brightnessDown = PhysicalKeyboardKey(0x000c0070);

  /// Represents the location of the "Brightness Toggle" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey brightnessToggle = PhysicalKeyboardKey(0x000c0072);

  /// Represents the location of the "Brightness Minimum" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey brightnessMinimum = PhysicalKeyboardKey(0x000c0073);

  /// Represents the location of the "Brightness Maximum" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey brightnessMaximum = PhysicalKeyboardKey(0x000c0074);

  /// Represents the location of the "Brightness Auto" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey brightnessAuto = PhysicalKeyboardKey(0x000c0075);

  /// Represents the location of the "Kbd Illum Up" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey kbdIllumUp = PhysicalKeyboardKey(0x000c0079);

  /// Represents the location of the "Kbd Illum Down" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey kbdIllumDown = PhysicalKeyboardKey(0x000c007a);

  /// Represents the location of the "Media Last" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaLast = PhysicalKeyboardKey(0x000c0083);

  /// Represents the location of the "Launch Phone" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchPhone = PhysicalKeyboardKey(0x000c008c);

  /// Represents the location of the "Program Guide" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey programGuide = PhysicalKeyboardKey(0x000c008d);

  /// Represents the location of the "Exit" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey exit = PhysicalKeyboardKey(0x000c0094);

  /// Represents the location of the "Channel Up" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey channelUp = PhysicalKeyboardKey(0x000c009c);

  /// Represents the location of the "Channel Down" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey channelDown = PhysicalKeyboardKey(0x000c009d);

  /// Represents the location of the "Media Play" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaPlay = PhysicalKeyboardKey(0x000c00b0);

  /// Represents the location of the "Media Pause" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaPause = PhysicalKeyboardKey(0x000c00b1);

  /// Represents the location of the "Media Record" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaRecord = PhysicalKeyboardKey(0x000c00b2);

  /// Represents the location of the "Media Fast Forward" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaFastForward = PhysicalKeyboardKey(0x000c00b3);

  /// Represents the location of the "Media Rewind" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaRewind = PhysicalKeyboardKey(0x000c00b4);

  /// Represents the location of the "Media Track Next" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaTrackNext = PhysicalKeyboardKey(0x000c00b5);

  /// Represents the location of the "Media Track Previous" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaTrackPrevious = PhysicalKeyboardKey(0x000c00b6);

  /// Represents the location of the "Media Stop" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaStop = PhysicalKeyboardKey(0x000c00b7);

  /// Represents the location of the "Eject" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey eject = PhysicalKeyboardKey(0x000c00b8);

  /// Represents the location of the "Media Play Pause" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaPlayPause = PhysicalKeyboardKey(0x000c00cd);

  /// Represents the location of the "Speech Input Toggle" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey speechInputToggle = PhysicalKeyboardKey(0x000c00cf);

  /// Represents the location of the "Bass Boost" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey bassBoost = PhysicalKeyboardKey(0x000c00e5);

  /// Represents the location of the "Media Select" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mediaSelect = PhysicalKeyboardKey(0x000c0183);

  /// Represents the location of the "Launch Word Processor" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchWordProcessor = PhysicalKeyboardKey(0x000c0184);

  /// Represents the location of the "Launch Spreadsheet" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchSpreadsheet = PhysicalKeyboardKey(0x000c0186);

  /// Represents the location of the "Launch Mail" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchMail = PhysicalKeyboardKey(0x000c018a);

  /// Represents the location of the "Launch Contacts" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchContacts = PhysicalKeyboardKey(0x000c018d);

  /// Represents the location of the "Launch Calendar" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchCalendar = PhysicalKeyboardKey(0x000c018e);

  /// Represents the location of the "Launch App2" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchApp2 = PhysicalKeyboardKey(0x000c0192);

  /// Represents the location of the "Launch App1" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchApp1 = PhysicalKeyboardKey(0x000c0194);

  /// Represents the location of the "Launch Internet Browser" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchInternetBrowser = PhysicalKeyboardKey(0x000c0196);

  /// Represents the location of the "Log Off" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey logOff = PhysicalKeyboardKey(0x000c019c);

  /// Represents the location of the "Lock Screen" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey lockScreen = PhysicalKeyboardKey(0x000c019e);

  /// Represents the location of the "Launch Control Panel" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchControlPanel = PhysicalKeyboardKey(0x000c019f);

  /// Represents the location of the "Select Task" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey selectTask = PhysicalKeyboardKey(0x000c01a2);

  /// Represents the location of the "Launch Documents" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchDocuments = PhysicalKeyboardKey(0x000c01a7);

  /// Represents the location of the "Spell Check" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey spellCheck = PhysicalKeyboardKey(0x000c01ab);

  /// Represents the location of the "Launch Keyboard Layout" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchKeyboardLayout = PhysicalKeyboardKey(0x000c01ae);

  /// Represents the location of the "Launch Screen Saver" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchScreenSaver = PhysicalKeyboardKey(0x000c01b1);

  /// Represents the location of the "Launch Assistant" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchAssistant = PhysicalKeyboardKey(0x000c01cb);

  /// Represents the location of the "Launch Audio Browser" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey launchAudioBrowser = PhysicalKeyboardKey(0x000c01b7);

  /// Represents the location of the "New Key" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey newKey = PhysicalKeyboardKey(0x000c0201);

  /// Represents the location of the "Close" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey close = PhysicalKeyboardKey(0x000c0203);

  /// Represents the location of the "Save" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey save = PhysicalKeyboardKey(0x000c0207);

  /// Represents the location of the "Print" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey print = PhysicalKeyboardKey(0x000c0208);

  /// Represents the location of the "Browser Search" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserSearch = PhysicalKeyboardKey(0x000c0221);

  /// Represents the location of the "Browser Home" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserHome = PhysicalKeyboardKey(0x000c0223);

  /// Represents the location of the "Browser Back" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserBack = PhysicalKeyboardKey(0x000c0224);

  /// Represents the location of the "Browser Forward" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserForward = PhysicalKeyboardKey(0x000c0225);

  /// Represents the location of the "Browser Stop" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserStop = PhysicalKeyboardKey(0x000c0226);

  /// Represents the location of the "Browser Refresh" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserRefresh = PhysicalKeyboardKey(0x000c0227);

  /// Represents the location of the "Browser Favorites" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey browserFavorites = PhysicalKeyboardKey(0x000c022a);

  /// Represents the location of the "Zoom In" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey zoomIn = PhysicalKeyboardKey(0x000c022d);

  /// Represents the location of the "Zoom Out" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey zoomOut = PhysicalKeyboardKey(0x000c022e);

  /// Represents the location of the "Zoom Toggle" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey zoomToggle = PhysicalKeyboardKey(0x000c0232);

  /// Represents the location of the "Redo" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey redo = PhysicalKeyboardKey(0x000c0279);

  /// Represents the location of the "Mail Reply" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mailReply = PhysicalKeyboardKey(0x000c0289);

  /// Represents the location of the "Mail Forward" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mailForward = PhysicalKeyboardKey(0x000c028b);

  /// Represents the location of the "Mail Send" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey mailSend = PhysicalKeyboardKey(0x000c028c);

  /// Represents the location of the "Keyboard Layout Select" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey keyboardLayoutSelect = PhysicalKeyboardKey(0x000c029d);

  /// Represents the location of the "Show All Windows" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey showAllWindows = PhysicalKeyboardKey(0x000c029f);

  /// Represents the location of the "Game Button 1" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton1 = PhysicalKeyboardKey(0x0005ff01);

  /// Represents the location of the "Game Button 2" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton2 = PhysicalKeyboardKey(0x0005ff02);

  /// Represents the location of the "Game Button 3" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton3 = PhysicalKeyboardKey(0x0005ff03);

  /// Represents the location of the "Game Button 4" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton4 = PhysicalKeyboardKey(0x0005ff04);

  /// Represents the location of the "Game Button 5" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton5 = PhysicalKeyboardKey(0x0005ff05);

  /// Represents the location of the "Game Button 6" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton6 = PhysicalKeyboardKey(0x0005ff06);

  /// Represents the location of the "Game Button 7" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton7 = PhysicalKeyboardKey(0x0005ff07);

  /// Represents the location of the "Game Button 8" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton8 = PhysicalKeyboardKey(0x0005ff08);

  /// Represents the location of the "Game Button 9" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton9 = PhysicalKeyboardKey(0x0005ff09);

  /// Represents the location of the "Game Button 10" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton10 = PhysicalKeyboardKey(0x0005ff0a);

  /// Represents the location of the "Game Button 11" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton11 = PhysicalKeyboardKey(0x0005ff0b);

  /// Represents the location of the "Game Button 12" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton12 = PhysicalKeyboardKey(0x0005ff0c);

  /// Represents the location of the "Game Button 13" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton13 = PhysicalKeyboardKey(0x0005ff0d);

  /// Represents the location of the "Game Button 14" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton14 = PhysicalKeyboardKey(0x0005ff0e);

  /// Represents the location of the "Game Button 15" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton15 = PhysicalKeyboardKey(0x0005ff0f);

  /// Represents the location of the "Game Button 16" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButton16 = PhysicalKeyboardKey(0x0005ff10);

  /// Represents the location of the "Game Button A" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonA = PhysicalKeyboardKey(0x0005ff11);

  /// Represents the location of the "Game Button B" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonB = PhysicalKeyboardKey(0x0005ff12);

  /// Represents the location of the "Game Button C" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonC = PhysicalKeyboardKey(0x0005ff13);

  /// Represents the location of the "Game Button Left 1" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonLeft1 = PhysicalKeyboardKey(0x0005ff14);

  /// Represents the location of the "Game Button Left 2" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonLeft2 = PhysicalKeyboardKey(0x0005ff15);

  /// Represents the location of the "Game Button Mode" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonMode = PhysicalKeyboardKey(0x0005ff16);

  /// Represents the location of the "Game Button Right 1" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonRight1 = PhysicalKeyboardKey(0x0005ff17);

  /// Represents the location of the "Game Button Right 2" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonRight2 = PhysicalKeyboardKey(0x0005ff18);

  /// Represents the location of the "Game Button Select" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonSelect = PhysicalKeyboardKey(0x0005ff19);

  /// Represents the location of the "Game Button Start" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonStart = PhysicalKeyboardKey(0x0005ff1a);

  /// Represents the location of the "Game Button Thumb Left" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonThumbLeft = PhysicalKeyboardKey(0x0005ff1b);

  /// Represents the location of the "Game Button Thumb Right" key on a
  /// generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonThumbRight = PhysicalKeyboardKey(0x0005ff1c);

  /// Represents the location of the "Game Button X" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonX = PhysicalKeyboardKey(0x0005ff1d);

  /// Represents the location of the "Game Button Y" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonY = PhysicalKeyboardKey(0x0005ff1e);

  /// Represents the location of the "Game Button Z" key on a generalized
  /// keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey gameButtonZ = PhysicalKeyboardKey(0x0005ff1f);

  /// Represents the location of the "Fn" key on a generalized keyboard.
  ///
  /// See the function [RawKeyEvent.physicalKey] for more information.
  static const PhysicalKeyboardKey fn = PhysicalKeyboardKey(0x00000012);

  // A list of all the predefined constant PhysicalKeyboardKeys so that they
  // can be searched.
  static const Map<int, PhysicalKeyboardKey> _knownPhysicalKeys = <int, PhysicalKeyboardKey>{
    0x00000000: none,
    0x00000010: hyper,
    0x00000011: superKey,
    0x00000013: fnLock,
    0x00000014: suspend,
    0x00000015: resume,
    0x00000016: turbo,
    0x00000017: privacyScreenToggle,
    0x00010082: sleep,
    0x00010083: wakeUp,
    0x000100b5: displayToggleIntExt,
    0x00070000: usbReserved,
    0x00070001: usbErrorRollOver,
    0x00070002: usbPostFail,
    0x00070003: usbErrorUndefined,
    0x00070004: keyA,
    0x00070005: keyB,
    0x00070006: keyC,
    0x00070007: keyD,
    0x00070008: keyE,
    0x00070009: keyF,
    0x0007000a: keyG,
    0x0007000b: keyH,
    0x0007000c: keyI,
    0x0007000d: keyJ,
    0x0007000e: keyK,
    0x0007000f: keyL,
    0x00070010: keyM,
    0x00070011: keyN,
    0x00070012: keyO,
    0x00070013: keyP,
    0x00070014: keyQ,
    0x00070015: keyR,
    0x00070016: keyS,
    0x00070017: keyT,
    0x00070018: keyU,
    0x00070019: keyV,
    0x0007001a: keyW,
    0x0007001b: keyX,
    0x0007001c: keyY,
    0x0007001d: keyZ,
    0x0007001e: digit1,
    0x0007001f: digit2,
    0x00070020: digit3,
    0x00070021: digit4,
    0x00070022: digit5,
    0x00070023: digit6,
    0x00070024: digit7,
    0x00070025: digit8,
    0x00070026: digit9,
    0x00070027: digit0,
    0x00070028: enter,
    0x00070029: escape,
    0x0007002a: backspace,
    0x0007002b: tab,
    0x0007002c: space,
    0x0007002d: minus,
    0x0007002e: equal,
    0x0007002f: bracketLeft,
    0x00070030: bracketRight,
    0x00070031: backslash,
    0x00070033: semicolon,
    0x00070034: quote,
    0x00070035: backquote,
    0x00070036: comma,
    0x00070037: period,
    0x00070038: slash,
    0x00070039: capsLock,
    0x0007003a: f1,
    0x0007003b: f2,
    0x0007003c: f3,
    0x0007003d: f4,
    0x0007003e: f5,
    0x0007003f: f6,
    0x00070040: f7,
    0x00070041: f8,
    0x00070042: f9,
    0x00070043: f10,
    0x00070044: f11,
    0x00070045: f12,
    0x00070046: printScreen,
    0x00070047: scrollLock,
    0x00070048: pause,
    0x00070049: insert,
    0x0007004a: home,
    0x0007004b: pageUp,
    0x0007004c: delete,
    0x0007004d: end,
    0x0007004e: pageDown,
    0x0007004f: arrowRight,
    0x00070050: arrowLeft,
    0x00070051: arrowDown,
    0x00070052: arrowUp,
    0x00070053: numLock,
    0x00070054: numpadDivide,
    0x00070055: numpadMultiply,
    0x00070056: numpadSubtract,
    0x00070057: numpadAdd,
    0x00070058: numpadEnter,
    0x00070059: numpad1,
    0x0007005a: numpad2,
    0x0007005b: numpad3,
    0x0007005c: numpad4,
    0x0007005d: numpad5,
    0x0007005e: numpad6,
    0x0007005f: numpad7,
    0x00070060: numpad8,
    0x00070061: numpad9,
    0x00070062: numpad0,
    0x00070063: numpadDecimal,
    0x00070064: intlBackslash,
    0x00070065: contextMenu,
    0x00070066: power,
    0x00070067: numpadEqual,
    0x00070068: f13,
    0x00070069: f14,
    0x0007006a: f15,
    0x0007006b: f16,
    0x0007006c: f17,
    0x0007006d: f18,
    0x0007006e: f19,
    0x0007006f: f20,
    0x00070070: f21,
    0x00070071: f22,
    0x00070072: f23,
    0x00070073: f24,
    0x00070074: open,
    0x00070075: help,
    0x00070077: select,
    0x00070079: again,
    0x0007007a: undo,
    0x0007007b: cut,
    0x0007007c: copy,
    0x0007007d: paste,
    0x0007007e: find,
    0x0007007f: audioVolumeMute,
    0x00070080: audioVolumeUp,
    0x00070081: audioVolumeDown,
    0x00070085: numpadComma,
    0x00070087: intlRo,
    0x00070088: kanaMode,
    0x00070089: intlYen,
    0x0007008a: convert,
    0x0007008b: nonConvert,
    0x00070090: lang1,
    0x00070091: lang2,
    0x00070092: lang3,
    0x00070093: lang4,
    0x00070094: lang5,
    0x0007009b: abort,
    0x000700a3: props,
    0x000700b6: numpadParenLeft,
    0x000700b7: numpadParenRight,
    0x000700bb: numpadBackspace,
    0x000700d0: numpadMemoryStore,
    0x000700d1: numpadMemoryRecall,
    0x000700d2: numpadMemoryClear,
    0x000700d3: numpadMemoryAdd,
    0x000700d4: numpadMemorySubtract,
    0x000700d7: numpadSignChange,
    0x000700d8: numpadClear,
    0x000700d9: numpadClearEntry,
    0x000700e0: controlLeft,
    0x000700e1: shiftLeft,
    0x000700e2: altLeft,
    0x000700e3: metaLeft,
    0x000700e4: controlRight,
    0x000700e5: shiftRight,
    0x000700e6: altRight,
    0x000700e7: metaRight,
    0x000c0060: info,
    0x000c0061: closedCaptionToggle,
    0x000c006f: brightnessUp,
    0x000c0070: brightnessDown,
    0x000c0072: brightnessToggle,
    0x000c0073: brightnessMinimum,
    0x000c0074: brightnessMaximum,
    0x000c0075: brightnessAuto,
    0x000c0079: kbdIllumUp,
    0x000c007a: kbdIllumDown,
    0x000c0083: mediaLast,
    0x000c008c: launchPhone,
    0x000c008d: programGuide,
    0x000c0094: exit,
    0x000c009c: channelUp,
    0x000c009d: channelDown,
    0x000c00b0: mediaPlay,
    0x000c00b1: mediaPause,
    0x000c00b2: mediaRecord,
    0x000c00b3: mediaFastForward,
    0x000c00b4: mediaRewind,
    0x000c00b5: mediaTrackNext,
    0x000c00b6: mediaTrackPrevious,
    0x000c00b7: mediaStop,
    0x000c00b8: eject,
    0x000c00cd: mediaPlayPause,
    0x000c00cf: speechInputToggle,
    0x000c00e5: bassBoost,
    0x000c0183: mediaSelect,
    0x000c0184: launchWordProcessor,
    0x000c0186: launchSpreadsheet,
    0x000c018a: launchMail,
    0x000c018d: launchContacts,
    0x000c018e: launchCalendar,
    0x000c0192: launchApp2,
    0x000c0194: launchApp1,
    0x000c0196: launchInternetBrowser,
    0x000c019c: logOff,
    0x000c019e: lockScreen,
    0x000c019f: launchControlPanel,
    0x000c01a2: selectTask,
    0x000c01a7: launchDocuments,
    0x000c01ab: spellCheck,
    0x000c01ae: launchKeyboardLayout,
    0x000c01b1: launchScreenSaver,
    0x000c01cb: launchAssistant,
    0x000c01b7: launchAudioBrowser,
    0x000c0201: newKey,
    0x000c0203: close,
    0x000c0207: save,
    0x000c0208: print,
    0x000c0221: browserSearch,
    0x000c0223: browserHome,
    0x000c0224: browserBack,
    0x000c0225: browserForward,
    0x000c0226: browserStop,
    0x000c0227: browserRefresh,
    0x000c022a: browserFavorites,
    0x000c022d: zoomIn,
    0x000c022e: zoomOut,
    0x000c0232: zoomToggle,
    0x000c0279: redo,
    0x000c0289: mailReply,
    0x000c028b: mailForward,
    0x000c028c: mailSend,
    0x000c029d: keyboardLayoutSelect,
    0x000c029f: showAllWindows,
    0x0005ff01: gameButton1,
    0x0005ff02: gameButton2,
    0x0005ff03: gameButton3,
    0x0005ff04: gameButton4,
    0x0005ff05: gameButton5,
    0x0005ff06: gameButton6,
    0x0005ff07: gameButton7,
    0x0005ff08: gameButton8,
    0x0005ff09: gameButton9,
    0x0005ff0a: gameButton10,
    0x0005ff0b: gameButton11,
    0x0005ff0c: gameButton12,
    0x0005ff0d: gameButton13,
    0x0005ff0e: gameButton14,
    0x0005ff0f: gameButton15,
    0x0005ff10: gameButton16,
    0x0005ff11: gameButtonA,
    0x0005ff12: gameButtonB,
    0x0005ff13: gameButtonC,
    0x0005ff14: gameButtonLeft1,
    0x0005ff15: gameButtonLeft2,
    0x0005ff16: gameButtonMode,
    0x0005ff17: gameButtonRight1,
    0x0005ff18: gameButtonRight2,
    0x0005ff19: gameButtonSelect,
    0x0005ff1a: gameButtonStart,
    0x0005ff1b: gameButtonThumbLeft,
    0x0005ff1c: gameButtonThumbRight,
    0x0005ff1d: gameButtonX,
    0x0005ff1e: gameButtonY,
    0x0005ff1f: gameButtonZ,
    0x00000012: fn,
  };

  static const Map<int, String> _debugNames = kReleaseMode ?
    <int, String>{} :
    <int, String>{
      0x00000000: 'None',
      0x00000010: 'Hyper',
      0x00000011: 'Super Key',
      0x00000013: 'Fn Lock',
      0x00000014: 'Suspend',
      0x00000015: 'Resume',
      0x00000016: 'Turbo',
      0x00000017: 'Privacy Screen Toggle',
      0x00010082: 'Sleep',
      0x00010083: 'Wake Up',
      0x000100b5: 'Display Toggle Int Ext',
      0x00070000: 'Usb Reserved',
      0x00070001: 'Usb Error Roll Over',
      0x00070002: 'Usb Post Fail',
      0x00070003: 'Usb Error Undefined',
      0x00070004: 'Key A',
      0x00070005: 'Key B',
      0x00070006: 'Key C',
      0x00070007: 'Key D',
      0x00070008: 'Key E',
      0x00070009: 'Key F',
      0x0007000a: 'Key G',
      0x0007000b: 'Key H',
      0x0007000c: 'Key I',
      0x0007000d: 'Key J',
      0x0007000e: 'Key K',
      0x0007000f: 'Key L',
      0x00070010: 'Key M',
      0x00070011: 'Key N',
      0x00070012: 'Key O',
      0x00070013: 'Key P',
      0x00070014: 'Key Q',
      0x00070015: 'Key R',
      0x00070016: 'Key S',
      0x00070017: 'Key T',
      0x00070018: 'Key U',
      0x00070019: 'Key V',
      0x0007001a: 'Key W',
      0x0007001b: 'Key X',
      0x0007001c: 'Key Y',
      0x0007001d: 'Key Z',
      0x0007001e: 'Digit 1',
      0x0007001f: 'Digit 2',
      0x00070020: 'Digit 3',
      0x00070021: 'Digit 4',
      0x00070022: 'Digit 5',
      0x00070023: 'Digit 6',
      0x00070024: 'Digit 7',
      0x00070025: 'Digit 8',
      0x00070026: 'Digit 9',
      0x00070027: 'Digit 0',
      0x00070028: 'Enter',
      0x00070029: 'Escape',
      0x0007002a: 'Backspace',
      0x0007002b: 'Tab',
      0x0007002c: 'Space',
      0x0007002d: 'Minus',
      0x0007002e: 'Equal',
      0x0007002f: 'Bracket Left',
      0x00070030: 'Bracket Right',
      0x00070031: 'Backslash',
      0x00070033: 'Semicolon',
      0x00070034: 'Quote',
      0x00070035: 'Backquote',
      0x00070036: 'Comma',
      0x00070037: 'Period',
      0x00070038: 'Slash',
      0x00070039: 'Caps Lock',
      0x0007003a: 'F1',
      0x0007003b: 'F2',
      0x0007003c: 'F3',
      0x0007003d: 'F4',
      0x0007003e: 'F5',
      0x0007003f: 'F6',
      0x00070040: 'F7',
      0x00070041: 'F8',
      0x00070042: 'F9',
      0x00070043: 'F10',
      0x00070044: 'F11',
      0x00070045: 'F12',
      0x00070046: 'Print Screen',
      0x00070047: 'Scroll Lock',
      0x00070048: 'Pause',
      0x00070049: 'Insert',
      0x0007004a: 'Home',
      0x0007004b: 'Page Up',
      0x0007004c: 'Delete',
      0x0007004d: 'End',
      0x0007004e: 'Page Down',
      0x0007004f: 'Arrow Right',
      0x00070050: 'Arrow Left',
      0x00070051: 'Arrow Down',
      0x00070052: 'Arrow Up',
      0x00070053: 'Num Lock',
      0x00070054: 'Numpad Divide',
      0x00070055: 'Numpad Multiply',
      0x00070056: 'Numpad Subtract',
      0x00070057: 'Numpad Add',
      0x00070058: 'Numpad Enter',
      0x00070059: 'Numpad 1',
      0x0007005a: 'Numpad 2',
      0x0007005b: 'Numpad 3',
      0x0007005c: 'Numpad 4',
      0x0007005d: 'Numpad 5',
      0x0007005e: 'Numpad 6',
      0x0007005f: 'Numpad 7',
      0x00070060: 'Numpad 8',
      0x00070061: 'Numpad 9',
      0x00070062: 'Numpad 0',
      0x00070063: 'Numpad Decimal',
      0x00070064: 'Intl Backslash',
      0x00070065: 'Context Menu',
      0x00070066: 'Power',
      0x00070067: 'Numpad Equal',
      0x00070068: 'F13',
      0x00070069: 'F14',
      0x0007006a: 'F15',
      0x0007006b: 'F16',
      0x0007006c: 'F17',
      0x0007006d: 'F18',
      0x0007006e: 'F19',
      0x0007006f: 'F20',
      0x00070070: 'F21',
      0x00070071: 'F22',
      0x00070072: 'F23',
      0x00070073: 'F24',
      0x00070074: 'Open',
      0x00070075: 'Help',
      0x00070077: 'Select',
      0x00070079: 'Again',
      0x0007007a: 'Undo',
      0x0007007b: 'Cut',
      0x0007007c: 'Copy',
      0x0007007d: 'Paste',
      0x0007007e: 'Find',
      0x0007007f: 'Audio Volume Mute',
      0x00070080: 'Audio Volume Up',
      0x00070081: 'Audio Volume Down',
      0x00070085: 'Numpad Comma',
      0x00070087: 'Intl Ro',
      0x00070088: 'Kana Mode',
      0x00070089: 'Intl Yen',
      0x0007008a: 'Convert',
      0x0007008b: 'Non Convert',
      0x00070090: 'Lang 1',
      0x00070091: 'Lang 2',
      0x00070092: 'Lang 3',
      0x00070093: 'Lang 4',
      0x00070094: 'Lang 5',
      0x0007009b: 'Abort',
      0x000700a3: 'Props',
      0x000700b6: 'Numpad Paren Left',
      0x000700b7: 'Numpad Paren Right',
      0x000700bb: 'Numpad Backspace',
      0x000700d0: 'Numpad Memory Store',
      0x000700d1: 'Numpad Memory Recall',
      0x000700d2: 'Numpad Memory Clear',
      0x000700d3: 'Numpad Memory Add',
      0x000700d4: 'Numpad Memory Subtract',
      0x000700d7: 'Numpad Sign Change',
      0x000700d8: 'Numpad Clear',
      0x000700d9: 'Numpad Clear Entry',
      0x000700e0: 'Control Left',
      0x000700e1: 'Shift Left',
      0x000700e2: 'Alt Left',
      0x000700e3: 'Meta Left',
      0x000700e4: 'Control Right',
      0x000700e5: 'Shift Right',
      0x000700e6: 'Alt Right',
      0x000700e7: 'Meta Right',
      0x000c0060: 'Info',
      0x000c0061: 'Closed Caption Toggle',
      0x000c006f: 'Brightness Up',
      0x000c0070: 'Brightness Down',
      0x000c0072: 'Brightness Toggle',
      0x000c0073: 'Brightness Minimum',
      0x000c0074: 'Brightness Maximum',
      0x000c0075: 'Brightness Auto',
      0x000c0079: 'Kbd Illum Up',
      0x000c007a: 'Kbd Illum Down',
      0x000c0083: 'Media Last',
      0x000c008c: 'Launch Phone',
      0x000c008d: 'Program Guide',
      0x000c0094: 'Exit',
      0x000c009c: 'Channel Up',
      0x000c009d: 'Channel Down',
      0x000c00b0: 'Media Play',
      0x000c00b1: 'Media Pause',
      0x000c00b2: 'Media Record',
      0x000c00b3: 'Media Fast Forward',
      0x000c00b4: 'Media Rewind',
      0x000c00b5: 'Media Track Next',
      0x000c00b6: 'Media Track Previous',
      0x000c00b7: 'Media Stop',
      0x000c00b8: 'Eject',
      0x000c00cd: 'Media Play Pause',
      0x000c00cf: 'Speech Input Toggle',
      0x000c00e5: 'Bass Boost',
      0x000c0183: 'Media Select',
      0x000c0184: 'Launch Word Processor',
      0x000c0186: 'Launch Spreadsheet',
      0x000c018a: 'Launch Mail',
      0x000c018d: 'Launch Contacts',
      0x000c018e: 'Launch Calendar',
      0x000c0192: 'Launch App2',
      0x000c0194: 'Launch App1',
      0x000c0196: 'Launch Internet Browser',
      0x000c019c: 'Log Off',
      0x000c019e: 'Lock Screen',
      0x000c019f: 'Launch Control Panel',
      0x000c01a2: 'Select Task',
      0x000c01a7: 'Launch Documents',
      0x000c01ab: 'Spell Check',
      0x000c01ae: 'Launch Keyboard Layout',
      0x000c01b1: 'Launch Screen Saver',
      0x000c01cb: 'Launch Assistant',
      0x000c01b7: 'Launch Audio Browser',
      0x000c0201: 'New Key',
      0x000c0203: 'Close',
      0x000c0207: 'Save',
      0x000c0208: 'Print',
      0x000c0221: 'Browser Search',
      0x000c0223: 'Browser Home',
      0x000c0224: 'Browser Back',
      0x000c0225: 'Browser Forward',
      0x000c0226: 'Browser Stop',
      0x000c0227: 'Browser Refresh',
      0x000c022a: 'Browser Favorites',
      0x000c022d: 'Zoom In',
      0x000c022e: 'Zoom Out',
      0x000c0232: 'Zoom Toggle',
      0x000c0279: 'Redo',
      0x000c0289: 'Mail Reply',
      0x000c028b: 'Mail Forward',
      0x000c028c: 'Mail Send',
      0x000c029d: 'Keyboard Layout Select',
      0x000c029f: 'Show All Windows',
      0x0005ff01: 'Game Button 1',
      0x0005ff02: 'Game Button 2',
      0x0005ff03: 'Game Button 3',
      0x0005ff04: 'Game Button 4',
      0x0005ff05: 'Game Button 5',
      0x0005ff06: 'Game Button 6',
      0x0005ff07: 'Game Button 7',
      0x0005ff08: 'Game Button 8',
      0x0005ff09: 'Game Button 9',
      0x0005ff0a: 'Game Button 10',
      0x0005ff0b: 'Game Button 11',
      0x0005ff0c: 'Game Button 12',
      0x0005ff0d: 'Game Button 13',
      0x0005ff0e: 'Game Button 14',
      0x0005ff0f: 'Game Button 15',
      0x0005ff10: 'Game Button 16',
      0x0005ff11: 'Game Button A',
      0x0005ff12: 'Game Button B',
      0x0005ff13: 'Game Button C',
      0x0005ff14: 'Game Button Left 1',
      0x0005ff15: 'Game Button Left 2',
      0x0005ff16: 'Game Button Mode',
      0x0005ff17: 'Game Button Right 1',
      0x0005ff18: 'Game Button Right 2',
      0x0005ff19: 'Game Button Select',
      0x0005ff1a: 'Game Button Start',
      0x0005ff1b: 'Game Button Thumb Left',
      0x0005ff1c: 'Game Button Thumb Right',
      0x0005ff1d: 'Game Button X',
      0x0005ff1e: 'Game Button Y',
      0x0005ff1f: 'Game Button Z',
      0x00000012: 'Fn',
    };
}
