<itemvalue="[RawKeyboard] is the legacy API, and will be deprecated and removed in the future. It is recommended to always use [HardwareKeyboard] and [KeyEvent] APIs (such as [FocusNode.onKeyEvent]) to handle key events."/>
<itemvalue="Flutter will try to synchronize with the ground truth of keyboard states using synthesized events ([KeyEvent.synthesized]), subject to the availability of the platform. The desynchronization can be caused by non-empty initial state or a change in the focused window or application. For example, if CapsLock is enabled when the application starts, then immediately before the first key event, a synthesized [KeyDownEvent] and [KeyUpEvent] of CapsLock will be dispatched. The resulting event stream does not map one-to-one to the native key event stream. Some native events might be skipped, while some events might be synthesized and do not correspond to native events. Synthesized events will be indicated by [KeyEvent.synthesized]."/>
<itemvalue="When the Flutter application starts, all keys are released, and all lock modes are disabled. Upon key events, [HardwareKeyboard] will update its states, then dispatch callbacks: [KeyDownEvent]s and [KeyUpEvent]s set or reset the pressing state, while [KeyDownEvent]s also toggle lock modes."/>
<itemvalue="Event model Flutter uses a universal event model ([KeyEvent]) and key options ([LogicalKeyboardKey] and [PhysicalKeyboardKey]) regardless of the native platform, while preserving platform-specific features as much as possible. [HardwareKeyboard] guarantees that the key model is "regularized": The key event stream consists of "key tap sequences", where a key tap sequence is defined as one [KeyDownEvent], zero or more [KeyRepeatEvent]s, and one [KeyUpEvent"/>
<itemvalue="Manages key events from hardware keyboards. [HardwareKeyboard] manages all key events of the Flutter application from hardware keyboards (in contrast to on-screen keyboards). It receives key data from the native platform, dispatches key events to registered handlers, and records the keyboard state. To stay notified whenever keys are pressed, held, or released, add a handler with [addHandler]. To only be notified when a specific part of the app is focused, use a [Focus] widget's `onFocusChanged` attribute instead of [addHandler]. Handlers should be removed with [removeHandler] when notification is no longer necessary, or when the handler is being disposed. To query whether a key is being held, or a lock mode is enabled, use [physicalKeysPressed], [logicalKeysPressed], or [lockModesEnabled]. These states will have been updated with the event when used during a key event handler. The singleton [HardwareKeyboard] instance is held by the [ServicesBinding] as [ServicesBinding.keyboard], and can be conveniently accessed using the [HardwareKeyboard.instance] static accessor."/>
<itemvalue="A widget that calls a callback whenever the user presses or releases a key on a keyboard. A [RawKeyboardListener] is useful for listening to raw key events and hardware buttons that are represented as keys. Typically used by games and other apps that use keyboards for purposes other than text entry. For text entry, consider using a [EditableText], which integrates with on-screen keyboards and input method editors (IMEs). The [RawKeyboardListener] is different from [KeyboardListener] in that [RawKeyboardListener] uses the legacy [RawKeyboard] API. Use [KeyboardListener] if possible. See also: [EditableText], which should be used instead of this widget for text entry. [KeyboardListener], a similar widget based on the newer [HardwareKeyboard] API."/>
<itemvalue="Specify that the automatic animation should repeat in a loop (default to true). The property has no effect if [animate] is false or [controller] is not null."/>
<itemvalue="Indicate to automatically add a `RepaintBoundary` widget around the animation. This allows to optimize the app performance by isolating the animation in its own `Layer`. This property is `true` by default."/>