Repository: flutter
Issue: Test Linux's FlView, and that Keyboard state is reset when engine restarts
Labels: a: tests,a: text input,engine,platform-linux,a: desktop,has reproducible steps,P2,found in release: 2.5,found in release: 2.6,team-linux,triaged-linux

We could not find a way to unit test the `FlView` as of 10/5/2021 ([97f027](https://github.com/flutter/engine/tree/97f0274afd7a2da5af3de3e20bba1dab49f07411)), because most of its code can't be run headlessly. We should add a regression test for https://github.com/flutter/engine/pull/28877 with the following step:

App: any app.

Steps:
1. Run with `flutter run -d linux`
2. Press ShiftLeft and hold
3. Hot restart the app
  - If run mannually, use the mouse to focus the terminal's window, then press R to hot restart. (You can release ShiftLeft now.)
4. Switch back to the restarted app, press any key.

Expected: the key press is processed normally.

Actual: The app crashes with the following log:
<details><pre>
══╡ EXCEPTION CAUGHT BY SERVICES LIBRARY ╞══════════════════════════════════════════════════════════
The following assertion was thrown during a platform message callback:
A KeyUpEvent is dispatched, but the state shows that the physical key is not pressed. If this occurs
in real application, please report this bug to Flutter. If this occurs in unit tests, please ensure
that simulated events follow Flutter's event model as documented in `HardwareKeyboard`. This was the
event: KeyUpEvent#4bf2a(physicalKey: PhysicalKeyboardKey#700e1(usbHidUsage: "0x000700e1", debugName:
"Shift Left"), logicalKey: LogicalKeyboardKey#00102(keyId: "0x200000102", keyLabel: "Shift Left",
debugName: "Shift Left"), character: null, timeStamp: 542:07:44.112000, synthesized)
'package:flutter/src/services/hardware_keyboard.dart':
Failed assertion: line 441 pos 16: '_pressedKeys.containsKey(event.physicalKey)'

Either the assertion indicates an error in the framework itself, or we should provide substantially
more information in this error message to help you determine and fix the underlying cause.
In either case, please report this assertion by filing a bug on GitHub:
  https://github.com/flutter/flutter/issues/new?template=2_bug.md

When the exception was thrown, this was the stack:
#2      HardwareKeyboard._assertEventIsRegular.<anonymous closure>
(package:flutter/src/services/hardware_keyboard.dart:441:16)
#3      HardwareKeyboard._assertEventIsRegular (package:flutter/src/services/hardware_keyboard.dart:452:6)
#4      HardwareKeyboard.handleKeyEvent (package:flutter/src/services/hardware_keyboard.dart:543:5)
#5      KeyEventManager.handleRawKeyMessage (package:flutter/src/services/hardware_keyboard.dart:821:35)
#6      BasicMessageChannel.setMessageHandler.<anonymous closure>
(package:flutter/src/services/platform_channel.dart:77:49)
#7      BasicMessageChannel.setMessageHandler.<anonymous closure>
(package:flutter/src/services/platform_channel.dart:76:47)
#8      _DefaultBinaryMessenger.setMessageHandler.<anonymous closure>
(package:flutter/src/services/binding.dart:386:35)
#9      _DefaultBinaryMessenger.setMessageHandler.<anonymous closure>
(package:flutter/src/services/binding.dart:383:46)
#10     _invoke2.<anonymous closure> (dart:ui/hooks.dart:205:15)
#14     _invoke2 (dart:ui/hooks.dart:204:10)
#15     _ChannelCallbackRecord.invoke (dart:ui/channel_buffers.dart:42:5)
#16     _Channel.push (dart:ui/channel_buffers.dart:132:31)
#17     ChannelBuffers.push (dart:ui/channel_buffers.dart:329:17)
#18     PlatformDispatcher._dispatchPlatformMessage (dart:ui/platform_dispatcher.dart:544:22)
#19     _dispatchPlatformMessage (dart:ui/hooks.dart:92:31)
(elided 5 frames from class _AssertionError and dart:async)
════════════════════════════════════════════════════════════════════════════════════════════════════

** (test_app:594560): WARNING **: 23:43:36.514: Unable to retrieve framework response: Message is not valid JSON

Another exception was thrown: A KeyUpEvent is dispatched, but the state shows that the physical key is not
pressed. If this occurs in real application, please report this bug to Flutter. If this occurs in unit tests,
please ensure that simulated events follow Flutter's event model as documented in `HardwareKeyboard`. This was
the event: KeyUpEvent#4bf2a(physicalKey: PhysicalKeyboardKey#700e1(usbHidUsage: "0x000700e1", debugName:
"Shift Left"), logicalKey: LogicalKeyboardKey#00102(keyId: "0x200000102", keyLabel: "Shift Left", debugName:
"Shift Left"), character: null, timeStamp: 542:07:44.112000, synthesized)
</pre></details>

Note: This crash relies on the assertion on `KeyEvent` [here](https://github.com/flutter/flutter/blob/39f5769cd8e92c7a9542c2e31ba80efb10cf54a8/packages/flutter/lib/src/services/hardware_keyboard.dart#L430).