diff --git a/packages/flutter/lib/src/services/raw_keyboard.dart b/packages/flutter/lib/src/services/raw_keyboard.dart index 450f2f19d8..7e0df89f95 100644 --- a/packages/flutter/lib/src/services/raw_keyboard.dart +++ b/packages/flutter/lib/src/services/raw_keyboard.dart @@ -356,6 +356,10 @@ abstract class RawKeyEvent with Diagnosticable { keyCode: message['keyCode'] as int? ?? 0, modifiers: message['modifiers'] as int? ?? 0, ); + final Object? characters = message['characters']; + if (characters is String && characters.isNotEmpty) { + character = characters; + } case 'linux': final int unicodeScalarValues = message['unicodeScalarValues'] as int? ?? 0; data = RawKeyEventDataLinux( diff --git a/packages/flutter/test/services/raw_keyboard_test.dart b/packages/flutter/test/services/raw_keyboard_test.dart index f5c4b38b4a..37b6d08605 100644 --- a/packages/flutter/test/services/raw_keyboard_test.dart +++ b/packages/flutter/test/services/raw_keyboard_test.dart @@ -19,7 +19,7 @@ class _ModifierCheck { void main() { group('RawKeyboard', () { testWidgetsWithLeakTracking('The correct character is produced', (WidgetTester tester) async { - for (final String platform in ['linux', 'android', 'macos', 'fuchsia', 'windows']) { + for (final String platform in ['linux', 'android', 'macos', 'fuchsia', 'windows', 'ios']) { String character = ''; void handleKey(RawKeyEvent event) { expect(event.character, equals(character), reason: 'on $platform'); @@ -34,7 +34,7 @@ void main() { }); testWidgetsWithLeakTracking('No character is produced for non-printables', (WidgetTester tester) async { - for (final String platform in ['linux', 'android', 'macos', 'fuchsia', 'windows', 'web']) { + for (final String platform in ['linux', 'android', 'macos', 'fuchsia', 'windows', 'web', 'ios']) { void handleKey(RawKeyEvent event) { expect(event.character, isNull, reason: 'on $platform'); }