diff --git a/packages/flutter/lib/src/services/raw_keyboard.dart b/packages/flutter/lib/src/services/raw_keyboard.dart index 0184c9054e..a0d8245cb2 100644 --- a/packages/flutter/lib/src/services/raw_keyboard.dart +++ b/packages/flutter/lib/src/services/raw_keyboard.dart @@ -284,7 +284,7 @@ abstract class RawKeyEvent with Diagnosticable { /// Creates a concrete [RawKeyEvent] class from a message in the form received /// on the [SystemChannels.keyEvent] channel. - factory RawKeyEvent.fromMessage(Map message) { + factory RawKeyEvent.fromMessage(Map message) { String? character; RawKeyEventData _dataFromWeb() { final String? key = message['key'] as String?; @@ -303,7 +303,7 @@ abstract class RawKeyEvent with Diagnosticable { if (kIsWeb) { data = _dataFromWeb(); } else { - final String keymap = message['keymap'] as String; + final String keymap = message['keymap']! as String; switch (keymap) { case 'android': data = RawKeyEventDataAndroid( @@ -388,7 +388,7 @@ abstract class RawKeyEvent with Diagnosticable { throw FlutterError('Unknown keymap for key events: $keymap'); } } - final String type = message['type'] as String; + final String type = message['type']! as String; switch (type) { case 'keydown': return RawKeyDownEvent(data: data, character: character); diff --git a/packages/flutter/lib/src/services/system_channels.dart b/packages/flutter/lib/src/services/system_channels.dart index 49af63f230..582daee3d4 100644 --- a/packages/flutter/lib/src/services/system_channels.dart +++ b/packages/flutter/lib/src/services/system_channels.dart @@ -240,7 +240,7 @@ class SystemChannels { /// * [RawKeyboard], which uses this channel to expose key data. /// * [new RawKeyEvent.fromMessage], which can decode this data into the [RawKeyEvent] /// subclasses mentioned above. - static const BasicMessageChannel keyEvent = BasicMessageChannel( + static const BasicMessageChannel keyEvent = BasicMessageChannel( 'flutter/keyevent', JSONMessageCodec(), ); @@ -271,7 +271,7 @@ class SystemChannels { /// applications to release caches to free up more memory. See /// [WidgetsBindingObserver.didHaveMemoryPressure], which triggers whenever /// a message is received on this channel. - static const BasicMessageChannel system = BasicMessageChannel( + static const BasicMessageChannel system = BasicMessageChannel( 'flutter/system', JSONMessageCodec(), ); @@ -283,7 +283,7 @@ class SystemChannels { /// * [SemanticsEvent] and its subclasses for a list of valid accessibility /// events that can be sent over this channel. /// * [SemanticsNode.sendEvent], which uses this channel to dispatch events. - static const BasicMessageChannel accessibility = BasicMessageChannel( + static const BasicMessageChannel accessibility = BasicMessageChannel( 'flutter/accessibility', StandardMessageCodec(), ); @@ -311,7 +311,7 @@ class SystemChannels { /// A [MethodChannel] for configuring mouse cursors. /// - /// All outgoing methods defined for this channel uses a `Map` + /// All outgoing methods defined for this channel uses a `Map` /// to contain multiple parameters, including the following methods (invoked /// using [OptionalMethodChannel.invokeMethod]): /// diff --git a/packages/flutter/test/services/raw_keyboard_test.dart b/packages/flutter/test/services/raw_keyboard_test.dart index 85544492cf..4a99fe4777 100644 --- a/packages/flutter/test/services/raw_keyboard_test.dart +++ b/packages/flutter/test/services/raw_keyboard_test.dart @@ -1086,15 +1086,15 @@ void main() { LogicalKeyboardKey.keyA, platform: 'android', ); - Map? message; + Map? message; await TestDefaultBinaryMessengerBinding.instance!.defaultBinaryMessenger.handlePlatformMessage( SystemChannels.keyEvent.name, SystemChannels.keyEvent.codec.encodeMessage(data), (ByteData? data) { - message = SystemChannels.keyEvent.codec.decodeMessage(data) as Map; + message = SystemChannels.keyEvent.codec.decodeMessage(data) as Map?; }, ); - expect(message, equals({ 'handled': false })); + expect(message, equals({ 'handled': false })); message = null; // Set up a widget that will receive focused text events. @@ -1115,15 +1115,15 @@ void main() { SystemChannels.keyEvent.name, SystemChannels.keyEvent.codec.encodeMessage(data), (ByteData? data) { - message = SystemChannels.keyEvent.codec.decodeMessage(data) as Map; + message = SystemChannels.keyEvent.codec.decodeMessage(data) as Map?; }, ); - expect(message, equals({ 'handled': true })); + expect(message, equals({ 'handled': true })); tester.binding.defaultBinaryMessenger.setMockMessageHandler(SystemChannels.keyEvent.name, null); }); test('data.toString', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'android', 'keyCode': 29, @@ -1141,7 +1141,7 @@ void main() { }); test('data.equality', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'android', 'keyCode': 29, @@ -1833,7 +1833,7 @@ void main() { }); test('Unprintable keyboard keys are correctly translated', () { - final RawKeyEvent leftArrowKey = RawKeyEvent.fromMessage(const { + final RawKeyEvent leftArrowKey = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'windows', 'keyCode': 37, // keyCode for left arrow. @@ -1854,7 +1854,7 @@ void main() { Future simulateKeyEventMessage(String type, int keyCode, int scanCode) { return ServicesBinding.instance!.defaultBinaryMessenger.handlePlatformMessage( SystemChannels.keyEvent.name, - SystemChannels.keyEvent.codec.encodeMessage({ + SystemChannels.keyEvent.codec.encodeMessage({ 'type': type, 'keymap': platform, 'keyCode': keyCode, @@ -1862,8 +1862,8 @@ void main() { 'modifiers': 0, }), (ByteData? data) { - final Map decoded = SystemChannels.keyEvent.codec.decodeMessage(data) as Map; - lastHandled = decoded['handled'] as bool; + final Map decoded = SystemChannels.keyEvent.codec.decodeMessage(data)! as Map; + lastHandled = decoded['handled']! as bool; }, ); } @@ -1879,7 +1879,7 @@ void main() { }); test('data.toString', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'windows', 'keyCode': 0x00000010, @@ -1891,7 +1891,7 @@ void main() { }); test('data.equality', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'windows', 'keyCode': 0x00000010, @@ -1905,7 +1905,7 @@ void main() { characterCodePoint: 10, )); - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'windows', 'keyCode': 0x00000010, @@ -1950,7 +1950,7 @@ void main() { for (final int modifier in modifierTests.keys) { for (final bool isDown in [true, false]) { for (final bool isLeft in [true, false]) { - final RawKeyEvent event = RawKeyEvent.fromMessage({ + final RawKeyEvent event = RawKeyEvent.fromMessage({ 'type': isDown ? 'keydown' : 'keyup', 'keymap': 'linux', 'toolkit': 'glfw', @@ -1988,7 +1988,7 @@ void main() { // No need to combine CTRL key with itself. continue; } - final RawKeyEvent event = RawKeyEvent.fromMessage({ + final RawKeyEvent event = RawKeyEvent.fromMessage({ 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2024,7 +2024,7 @@ void main() { }); test('Printable keyboard keys are correctly translated', () { - final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2040,7 +2040,7 @@ void main() { }); test('Code points with two Unicode scalar values are allowed', () { - final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2058,7 +2058,7 @@ void main() { test('Code points with more than three Unicode scalar values are not allowed', () { // |keyCode| and |scanCode| are arbitrary values. This test should fail due to an invalid |unicodeScalarValues|. void _createFailingKey() { - RawKeyEvent.fromMessage(const { + RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2073,7 +2073,7 @@ void main() { }); test('Control keyboard keys are correctly translated', () { - final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2089,7 +2089,7 @@ void main() { }); test('Modifier keyboard keys are correctly translated', () { - final RawKeyEvent shiftLeftKeyEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent shiftLeftKeyEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2104,7 +2104,7 @@ void main() { }); test('data.toString', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2117,7 +2117,7 @@ void main() { }); test('data.equality', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2134,7 +2134,7 @@ void main() { isDown: true, )); - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'glfw', @@ -2182,7 +2182,7 @@ void main() { for (final int modifier in modifierTests.keys) { for (final bool isDown in [true, false]) { for (final bool isLeft in [true, false]) { - final RawKeyEvent event = RawKeyEvent.fromMessage({ + final RawKeyEvent event = RawKeyEvent.fromMessage({ 'type': isDown ? 'keydown' : 'keyup', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2220,7 +2220,7 @@ void main() { // No need to combine CTRL key with itself. continue; } - final RawKeyEvent event = RawKeyEvent.fromMessage({ + final RawKeyEvent event = RawKeyEvent.fromMessage({ 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2256,7 +2256,7 @@ void main() { }); test('Printable keyboard keys are correctly translated', () { - final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2272,7 +2272,7 @@ void main() { }); test('Code points with two Unicode scalar values are allowed', () { - final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2290,7 +2290,7 @@ void main() { test('Code points with more than three Unicode scalar values are not allowed', () { // |keyCode| and |scanCode| are arbitrary values. This test should fail due to an invalid |unicodeScalarValues|. void _createFailingKey() { - RawKeyEvent.fromMessage(const { + RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2305,7 +2305,7 @@ void main() { }); test('Control keyboard keys are correctly translated', () { - final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2321,7 +2321,7 @@ void main() { }); test('Modifier keyboard keys are correctly translated', () { - final RawKeyEvent shiftLeftKeyEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent shiftLeftKeyEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2336,7 +2336,7 @@ void main() { }); test('data.toString', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2349,7 +2349,7 @@ void main() { }); test('data.equality', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2366,7 +2366,7 @@ void main() { isDown: true, )); - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2383,7 +2383,7 @@ void main() { isDown: true, )))); - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'linux', 'toolkit': 'gtk', @@ -2410,7 +2410,7 @@ void main() { test('modifier keys are recognized individually', () { for (final int modifier in modifierTests.keys) { - final RawKeyEvent event = RawKeyEvent.fromMessage({ + final RawKeyEvent event = RawKeyEvent.fromMessage({ 'type': 'keydown', 'keymap': 'web', 'code': 'RandomCode', @@ -2441,7 +2441,7 @@ void main() { // No need to combine meta key with itself. continue; } - final RawKeyEvent event = RawKeyEvent.fromMessage({ + final RawKeyEvent event = RawKeyEvent.fromMessage({ 'type': 'keydown', 'keymap': 'web', 'code': 'RandomCode', @@ -2469,7 +2469,7 @@ void main() { }); test('Printable keyboard keys are correctly translated', () { - final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent keyAEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'KeyA', @@ -2484,7 +2484,7 @@ void main() { }); test('Control keyboard keys are correctly translated', () { - final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent escapeKeyEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'Escape', @@ -2499,7 +2499,7 @@ void main() { }); test('Modifier keyboard keys are correctly translated', () { - final RawKeyEvent shiftKeyEvent = RawKeyEvent.fromMessage(const { + final RawKeyEvent shiftKeyEvent = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'ShiftLeft', @@ -2514,7 +2514,7 @@ void main() { }); test('Arrow keys from a keyboard give correct physical key mappings', () { - final RawKeyEvent arrowKeyDown = RawKeyEvent.fromMessage(const { + final RawKeyEvent arrowKeyDown = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'ArrowDown', @@ -2529,7 +2529,7 @@ void main() { }); test('Unrecognized keys are mapped to Web plane', () { - final RawKeyEvent arrowKeyDown = RawKeyEvent.fromMessage(const { + final RawKeyEvent arrowKeyDown = RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'Unrecog1', @@ -2548,7 +2548,7 @@ void main() { }); test('data.toString', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'KeyA', @@ -2559,7 +2559,7 @@ void main() { 'RawKeyEventDataWeb#00000(code: KeyA, key: a, location: 2, metaState: 16)')); // Without location - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'KeyA', @@ -2570,7 +2570,7 @@ void main() { }); test('data.equality', () { - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'KeyA', @@ -2584,7 +2584,7 @@ void main() { metaState: 0x10, )); - expect(RawKeyEvent.fromMessage(const { + expect(RawKeyEvent.fromMessage(const { 'type': 'keydown', 'keymap': 'web', 'code': 'KeyA', @@ -2610,6 +2610,6 @@ Future _runWhileOverridingOnError(AsyncCallback body, {required FlutterExc Map _groupDiagnosticsByName(Iterable infos) { return Map.fromIterable( infos, - key: (dynamic node) => (node as DiagnosticsNode).name ?? '', + key: (Object? node) => (node! as DiagnosticsNode).name ?? '', ); } diff --git a/packages/flutter_test/lib/src/event_simulation.dart b/packages/flutter_test/lib/src/event_simulation.dart index 07eac0b9a9..ff91e995f9 100644 --- a/packages/flutter_test/lib/src/event_simulation.dart +++ b/packages/flutter_test/lib/src/event_simulation.dart @@ -688,8 +688,8 @@ class KeyEventSimulator { result.complete(false); return; } - final Map decoded = SystemChannels.keyEvent.codec.decodeMessage(data) as Map; - result.complete(decoded['handled'] as bool); + final Map decoded = SystemChannels.keyEvent.codec.decodeMessage(data)! as Map; + result.complete(decoded['handled']! as bool); } ); return result.future;