@@ -842,6 +842,64 @@ void main() {
842842 expect (RawKeyboard .instance.keysPressed, contains (LogicalKeyboardKey .capsLock));
843843 }, skip: isBrowser); // [intended] This is an Android-specific group.
844844
845+ testWidgets ('Allows inconsistent modifier for Web - Alt graph' , (WidgetTester _) async {
846+ // Regression test for https://github.com/flutter/flutter/issues/113836
847+ final List <RawKeyEvent > events = < RawKeyEvent > [];
848+ RawKeyboard .instance.addListener (events.add);
849+ addTearDown (() {
850+ RawKeyboard .instance.removeListener (events.add);
851+ });
852+ await TestDefaultBinaryMessengerBinding .instance! .defaultBinaryMessenger.handlePlatformMessage (
853+ SystemChannels .keyEvent.name,
854+ SystemChannels .keyEvent.codec.encodeMessage (const < String , dynamic > {
855+ 'type' : 'keydown' ,
856+ 'keymap' : 'web' ,
857+ 'code' : 'AltRight' ,
858+ 'key' : 'AltGraph' ,
859+ 'location' : 2 ,
860+ 'metaState' : 0 ,
861+ 'keyCode' : 225 ,
862+ }),
863+ (ByteData ? data) { },
864+ );
865+
866+ expect (events, hasLength (1 ));
867+ final RawKeyEvent altRightKey = events[0 ];
868+ final RawKeyEventDataWeb data = altRightKey.data as RawKeyEventDataWeb ;
869+ expect (data.physicalKey, equals (PhysicalKeyboardKey .altRight));
870+ expect (data.logicalKey, equals (LogicalKeyboardKey .altGraph));
871+ expect (RawKeyboard .instance.keysPressed, contains (LogicalKeyboardKey .altGraph));
872+ }, skip: ! isBrowser); // [intended] This is a Browser-specific test.
873+
874+ testWidgets ('Allows inconsistent modifier for Web - Alt right' , (WidgetTester _) async {
875+ // Regression test for https://github.com/flutter/flutter/issues/113836
876+ final List <RawKeyEvent > events = < RawKeyEvent > [];
877+ RawKeyboard .instance.addListener (events.add);
878+ addTearDown (() {
879+ RawKeyboard .instance.removeListener (events.add);
880+ });
881+ await TestDefaultBinaryMessengerBinding .instance! .defaultBinaryMessenger.handlePlatformMessage (
882+ SystemChannels .keyEvent.name,
883+ SystemChannels .keyEvent.codec.encodeMessage (const < String , dynamic > {
884+ 'type' : 'keydown' ,
885+ 'keymap' : 'web' ,
886+ 'code' : 'AltRight' ,
887+ 'key' : 'Alt' ,
888+ 'location' : 2 ,
889+ 'metaState' : 0 ,
890+ 'keyCode' : 225 ,
891+ }),
892+ (ByteData ? data) { },
893+ );
894+
895+ expect (events, hasLength (1 ));
896+ final RawKeyEvent altRightKey = events[0 ];
897+ final RawKeyEventDataWeb data = altRightKey.data as RawKeyEventDataWeb ;
898+ expect (data.physicalKey, equals (PhysicalKeyboardKey .altRight));
899+ expect (data.logicalKey, equals (LogicalKeyboardKey .altRight));
900+ expect (RawKeyboard .instance.keysPressed, contains (LogicalKeyboardKey .altRight));
901+ }, skip: ! isBrowser); // [intended] This is a Browser-specific test.
902+
845903 testWidgets ('Dispatch events to all handlers' , (WidgetTester tester) async {
846904 final FocusNode focusNode = FocusNode ();
847905 final List <int > logs = < int > [];
0 commit comments