mirror of
				https://github.com/flame-engine/flame.git
				synced 2025-11-01 01:18:38 +08:00 
			
		
		
		
	fix!: Migrate from RawKeyEvent to KeyEvent (#3002)
				
					
				
			First pass at migrating from `RawKeyEvent` and `RawKeyboard` to `KeyEvent` and `HardwareKeyboard`. Context: https://docs.flutter.dev/release/breaking-changes/key-event-migration
This commit is contained in:
		
							
								
								
									
										2
									
								
								.github/workflows/cicd.yml
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										2
									
								
								.github/workflows/cicd.yml
									
									
									
									
										vendored
									
									
								
							| @ -9,7 +9,7 @@ on: | |||||||
|  |  | ||||||
|  |  | ||||||
| env: | env: | ||||||
|   FLUTTER_MIN_VERSION: '3.16.0' |   FLUTTER_MIN_VERSION: '3.19.0' | ||||||
|  |  | ||||||
| jobs: | jobs: | ||||||
|   # BEGIN LINTING STAGE |   # BEGIN LINTING STAGE | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ publish_to: none | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -44,7 +44,7 @@ class EmberPlayer extends SpriteAnimationComponent | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { |   bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | ||||||
|     horizontalDirection = 0; |     horizontalDirection = 0; | ||||||
|     horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyA) || |     horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyA) || | ||||||
|             keysPressed.contains(LogicalKeyboardKey.arrowLeft)) |             keysPressed.contains(LogicalKeyboardKey.arrowLeft)) | ||||||
|  | |||||||
| @ -5,6 +5,7 @@ version: 1.0.0+1 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|  |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -209,7 +209,7 @@ class PadRacingGame extends Forge2DGame with KeyboardEvents { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     super.onKeyEvent(event, keysPressed); |     super.onKeyEvent(event, keysPressed); | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ version: 0.1.0 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -88,7 +88,7 @@ class TRexGame extends FlameGame | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     if (keysPressed.contains(LogicalKeyboardKey.enter) || |     if (keysPressed.contains(LogicalKeyboardKey.enter) || | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ version: 0.1.0 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.16.0 |   collection: ^1.16.0 | ||||||
|  | |||||||
| @ -142,8 +142,8 @@ class Player extends PositionComponent with KeyboardHandler { | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { |   bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | ||||||
|     final isKeyDown = event is RawKeyDownEvent; |     final isKeyDown = event is KeyDownEvent; | ||||||
|     final keyLeft = (event.logicalKey == LogicalKeyboardKey.arrowLeft) || |     final keyLeft = (event.logicalKey == LogicalKeyboardKey.arrowLeft) || | ||||||
|         (event.logicalKey == LogicalKeyboardKey.keyA); |         (event.logicalKey == LogicalKeyboardKey.keyA); | ||||||
|     final keyRight = (event.logicalKey == LogicalKeyboardKey.arrowRight) || |     final keyRight = (event.logicalKey == LogicalKeyboardKey.arrowRight) || | ||||||
|  | |||||||
| @ -155,10 +155,10 @@ class CoordinateSystemsExample extends FlameGame | |||||||
|   /// Camera controls. |   /// Camera controls. | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     final isKeyDown = event is RawKeyDownEvent; |     final isKeyDown = event is KeyDownEvent; | ||||||
|  |  | ||||||
|     if (event.logicalKey == LogicalKeyboardKey.keyA) { |     if (event.logicalKey == LogicalKeyboardKey.keyA) { | ||||||
|       cameraVelocity.x = isKeyDown ? -1 : 0; |       cameraVelocity.x = isKeyDown ? -1 : 0; | ||||||
|  | |||||||
| @ -100,8 +100,8 @@ class MovableEmber extends Ember<FollowComponentExample> | |||||||
|   } |   } | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { |   bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | ||||||
|     final isKeyDown = event is RawKeyDownEvent; |     final isKeyDown = event is KeyDownEvent; | ||||||
|  |  | ||||||
|     final bool handled; |     final bool handled; | ||||||
|     if (event.logicalKey == LogicalKeyboardKey.keyA) { |     if (event.logicalKey == LogicalKeyboardKey.keyA) { | ||||||
|  | |||||||
| @ -142,7 +142,7 @@ Press T button to toggle player to collide with other objects. | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     for (final key in keysPressed) { |     for (final key in keysPressed) { | ||||||
|  | |||||||
| @ -39,14 +39,14 @@ class KeyboardExample extends FlameGame with KeyboardEvents { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     final isKeyDown = event is RawKeyDownEvent; |     final isKeyDown = event is KeyDownEvent; | ||||||
|  |  | ||||||
|     // Avoiding repeat event as we are interested only in |     // Avoiding repeat event as we are interested only in | ||||||
|     // key up and key down event. |     // key up and key down event. | ||||||
|     if (!event.repeat) { |     if (key is! KeyRepeatEvent) { | ||||||
|       if (event.logicalKey == LogicalKeyboardKey.keyA) { |       if (event.logicalKey == LogicalKeyboardKey.keyA) { | ||||||
|         _direction.x += isKeyDown ? -1 : 1; |         _direction.x += isKeyDown ? -1 : 1; | ||||||
|       } else if (event.logicalKey == LogicalKeyboardKey.keyD) { |       } else if (event.logicalKey == LogicalKeyboardKey.keyD) { | ||||||
|  | |||||||
| @ -30,10 +30,10 @@ class NoFlameGameExample extends Game with KeyboardEvents { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     final isKeyDown = event is RawKeyDownEvent; |     final isKeyDown = event is KeyDownEvent; | ||||||
|  |  | ||||||
|     if (event.logicalKey == LogicalKeyboardKey.keyA) { |     if (event.logicalKey == LogicalKeyboardKey.keyA) { | ||||||
|       velocity.x = isKeyDown ? -1 : 0; |       velocity.x = isKeyDown ? -1 : 0; | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ version: 0.1.0 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   dashbook: ^0.1.12 |   dashbook: ^0.1.12 | ||||||
|  | |||||||
| @ -16,6 +16,7 @@ command: | |||||||
|   bootstrap: |   bootstrap: | ||||||
|     environment: |     environment: | ||||||
|       sdk: ">=3.0.0 <4.0.0" |       sdk: ">=3.0.0 <4.0.0" | ||||||
|  |       flutter: ^3.19.0 | ||||||
|     dependencies: |     dependencies: | ||||||
|       meta: ^1.9.1 |       meta: ^1.9.1 | ||||||
|       vector_math: ^2.1.4 |       vector_math: ^2.1.4 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ publish_to: 'none' | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -23,8 +23,8 @@ class KeyboardListenerComponent extends Component with KeyboardHandler { | |||||||
|   final Map<LogicalKeyboardKey, KeyHandlerCallback> _keyDown; |   final Map<LogicalKeyboardKey, KeyHandlerCallback> _keyDown; | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { |   bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | ||||||
|     final isUp = event is RawKeyUpEvent; |     final isUp = event is KeyUpEvent; | ||||||
|  |  | ||||||
|     final handlers = isUp ? _keyUp : _keyDown; |     final handlers = isUp ? _keyUp : _keyDown; | ||||||
|     final handler = handlers[event.logicalKey]; |     final handler = handlers[event.logicalKey]; | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ import 'package:flutter/services.dart'; | |||||||
| /// Must be used in components that can only be added to games that are mixed | /// Must be used in components that can only be added to games that are mixed | ||||||
| /// with [HasKeyboardHandlerComponents]. | /// with [HasKeyboardHandlerComponents]. | ||||||
| mixin KeyboardHandler on Component { | mixin KeyboardHandler on Component { | ||||||
|   bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { |   bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | ||||||
|     return true; |     return true; | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  | |||||||
| @ -311,7 +311,7 @@ class GameWidgetState<T extends Game> extends State<GameWidget<T>> { | |||||||
|     } |     } | ||||||
|   } |   } | ||||||
|  |  | ||||||
|   KeyEventResult _handleKeyEvent(FocusNode focusNode, RawKeyEvent event) { |   KeyEventResult _handleKeyEvent(FocusNode focusNode, KeyEvent event) { | ||||||
|     final game = currentGame; |     final game = currentGame; | ||||||
|  |  | ||||||
|     if (!_focusNode.hasPrimaryFocus) { |     if (!_focusNode.hasPrimaryFocus) { | ||||||
| @ -319,7 +319,10 @@ class GameWidgetState<T extends Game> extends State<GameWidget<T>> { | |||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (game is KeyboardEvents) { |     if (game is KeyboardEvents) { | ||||||
|       return game.onKeyEvent(event, RawKeyboard.instance.keysPressed); |       return game.onKeyEvent( | ||||||
|  |         event, | ||||||
|  |         HardwareKeyboard.instance.logicalKeysPressed, | ||||||
|  |       ); | ||||||
|     } |     } | ||||||
|     return KeyEventResult.handled; |     return KeyEventResult.handled; | ||||||
|   } |   } | ||||||
| @ -361,7 +364,7 @@ class GameWidgetState<T extends Game> extends State<GameWidget<T>> { | |||||||
|           focusNode: _focusNode, |           focusNode: _focusNode, | ||||||
|           autofocus: widget.autofocus, |           autofocus: widget.autofocus, | ||||||
|           descendantsAreFocusable: true, |           descendantsAreFocusable: true, | ||||||
|           onKey: _handleKeyEvent, |           onKeyEvent: _handleKeyEvent, | ||||||
|           child: MouseRegion( |           child: MouseRegion( | ||||||
|             cursor: currentGame.mouseCursor, |             cursor: currentGame.mouseCursor, | ||||||
|             child: Directionality( |             child: Directionality( | ||||||
|  | |||||||
| @ -13,7 +13,7 @@ mixin HasKeyboardHandlerComponents<W extends World> on FlameGame<W> | |||||||
|   @override |   @override | ||||||
|   @mustCallSuper |   @mustCallSuper | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     final blockedPropagation = !propagateToChildren<KeyboardHandler>( |     final blockedPropagation = !propagateToChildren<KeyboardHandler>( | ||||||
| @ -34,7 +34,7 @@ mixin HasKeyboardHandlerComponents<W extends World> on FlameGame<W> | |||||||
| /// Override [onKeyEvent] to customize the keyboard handling behavior. | /// Override [onKeyEvent] to customize the keyboard handling behavior. | ||||||
| mixin KeyboardEvents on Game { | mixin KeyboardEvents on Game { | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     assert( |     assert( | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.17.1 |   collection: ^1.17.1 | ||||||
|  | |||||||
| @ -9,15 +9,15 @@ abstract class _KeyCallStub { | |||||||
|  |  | ||||||
| class KeyCallStub extends Mock implements _KeyCallStub {} | class KeyCallStub extends Mock implements _KeyCallStub {} | ||||||
|  |  | ||||||
| class MockRawKeyUpEvent extends Mock implements RawKeyUpEvent { | class MockKeyUpEvent extends Mock implements KeyUpEvent { | ||||||
|   @override |   @override | ||||||
|   String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { |   String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) { | ||||||
|     return super.toString(); |     return super.toString(); | ||||||
|   } |   } | ||||||
| } | } | ||||||
|  |  | ||||||
| RawKeyUpEvent _mockKeyUp(LogicalKeyboardKey key) { | KeyUpEvent _mockKeyUp(LogicalKeyboardKey key) { | ||||||
|   final event = MockRawKeyUpEvent(); |   final event = MockKeyUpEvent(); | ||||||
|   when(() => event.logicalKey).thenReturn(key); |   when(() => event.logicalKey).thenReturn(key); | ||||||
|   return event; |   return event; | ||||||
| } | } | ||||||
|  | |||||||
| @ -12,7 +12,7 @@ class _KeyboardEventsGame extends FlameGame with KeyboardEvents { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     this.keysPressed.add(event.character ?? 'none'); |     this.keysPressed.add(event.character ?? 'none'); | ||||||
| @ -25,7 +25,7 @@ class _KeyboardHandlerComponent extends Component with KeyboardHandler { | |||||||
|   final List<String> keysPressed = []; |   final List<String> keysPressed = []; | ||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) { |   bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) { | ||||||
|     this.keysPressed.add(event.character ?? 'none'); |     this.keysPressed.add(event.character ?? 'none'); | ||||||
|     return false; |     return false; | ||||||
|   } |   } | ||||||
|  | |||||||
| @ -25,7 +25,7 @@ class _GameWithKeyboardEvents extends FlameGame with KeyboardEvents { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     keyEvents.add(event.logicalKey); |     keyEvents.add(event.logicalKey); | ||||||
| @ -443,7 +443,7 @@ void main() { | |||||||
|     testWidgets('overlay handles keys', (tester) async { |     testWidgets('overlay handles keys', (tester) async { | ||||||
|       final overlayKeyEvents = <LogicalKeyboardKey>[]; |       final overlayKeyEvents = <LogicalKeyboardKey>[]; | ||||||
|       final overlayFocusNode = FocusNode( |       final overlayFocusNode = FocusNode( | ||||||
|         onKey: (_, keyEvent) { |         onKeyEvent: (_, keyEvent) { | ||||||
|           overlayKeyEvents.add(keyEvent.logicalKey); |           overlayKeyEvents.add(keyEvent.logicalKey); | ||||||
|           return KeyEventResult.ignored; |           return KeyEventResult.ignored; | ||||||
|         }, |         }, | ||||||
| @ -475,7 +475,7 @@ void main() { | |||||||
|       await simulateKeyDownEvent(LogicalKeyboardKey.keyA); |       await simulateKeyDownEvent(LogicalKeyboardKey.keyA); | ||||||
|       await tester.pump(); |       await tester.pump(); | ||||||
|  |  | ||||||
|       expect(game.keyEvents, <RawKeyEvent>[]); |       expect(game.keyEvents, <KeyEvent>[]); | ||||||
|       expect(overlayKeyEvents, [LogicalKeyboardKey.keyA]); |       expect(overlayKeyEvents, [LogicalKeyboardKey.keyA]); | ||||||
|     }); |     }); | ||||||
|   }); |   }); | ||||||
|  | |||||||
| @ -3,27 +3,23 @@ import 'package:flame/input.dart'; | |||||||
| import 'package:flutter/material.dart'; | import 'package:flutter/material.dart'; | ||||||
| import 'package:flutter/services.dart'; | import 'package:flutter/services.dart'; | ||||||
| import 'package:flutter_test/flutter_test.dart'; | import 'package:flutter_test/flutter_test.dart'; | ||||||
| import 'package:mocktail/mocktail.dart'; |  | ||||||
|  |  | ||||||
| class _ValidGame extends FlameGame with KeyboardEvents {} | class _ValidGame extends FlameGame with KeyboardEvents {} | ||||||
|  |  | ||||||
| class _InvalidGame extends FlameGame | class _InvalidGame extends FlameGame | ||||||
|     with HasKeyboardHandlerComponents, KeyboardEvents {} |     with HasKeyboardHandlerComponents, KeyboardEvents {} | ||||||
|  |  | ||||||
| class _MockRawKeyEventData extends Mock implements RawKeyEventData { |  | ||||||
|   @override |  | ||||||
|   String toString({DiagnosticLevel minLevel = DiagnosticLevel.debug}) { |  | ||||||
|     return super.toString(); |  | ||||||
|   } |  | ||||||
| } |  | ||||||
|  |  | ||||||
| void main() { | void main() { | ||||||
|   group('Keyboard events', () { |   group('Keyboard events', () { | ||||||
|     test( |     test( | ||||||
|       'game with KeyboardEvents can handle key events', |       'game with KeyboardEvents can handle key events', | ||||||
|       () { |       () { | ||||||
|         final validGame = _ValidGame(); |         final validGame = _ValidGame(); | ||||||
|         final event = RawKeyDownEvent(data: _MockRawKeyEventData()); |         const event = KeyDownEvent( | ||||||
|  |           physicalKey: PhysicalKeyboardKey.arrowUp, | ||||||
|  |           logicalKey: LogicalKeyboardKey.arrowUp, | ||||||
|  |           timeStamp: Duration.zero, | ||||||
|  |         ); | ||||||
|  |  | ||||||
|         // Should just work with the default implementation |         // Should just work with the default implementation | ||||||
|         expect( |         expect( | ||||||
| @ -37,7 +33,11 @@ void main() { | |||||||
|       'cannot mix KeyboardEvent and HasKeyboardHandlerComponents together', |       'cannot mix KeyboardEvent and HasKeyboardHandlerComponents together', | ||||||
|       () { |       () { | ||||||
|         final invalidGame = _InvalidGame(); |         final invalidGame = _InvalidGame(); | ||||||
|         final event = RawKeyDownEvent(data: _MockRawKeyEventData()); |         const event = KeyDownEvent( | ||||||
|  |           physicalKey: PhysicalKeyboardKey.arrowUp, | ||||||
|  |           logicalKey: LogicalKeyboardKey.arrowUp, | ||||||
|  |           timeStamp: Duration.zero, | ||||||
|  |         ); | ||||||
|  |  | ||||||
|         // Should throw an assertion error |         // Should throw an assertion error | ||||||
|         expect( |         expect( | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   audioplayers: ^5.0.0 |   audioplayers: ^5.0.0 | ||||||
|  | |||||||
| @ -107,7 +107,7 @@ class PlayerComponent extends SpriteAnimationComponent | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   bool onKeyEvent( |   bool onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     if (keysPressed.contains(LogicalKeyboardKey.tab)) { |     if (keysPressed.contains(LogicalKeyboardKey.tab)) { | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ version: 1.0.0+1 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|  |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   equatable: ^2.0.5 |   equatable: ^2.0.5 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.10.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   bloc: ^8.1.1 |   bloc: ^8.1.1 | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   archive: ^3.3.9 |   archive: ^3.3.9 | ||||||
|  | |||||||
| @ -7,7 +7,7 @@ version: 1.0.0+1 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   dashbook: ^0.1.12 |   dashbook: ^0.1.12 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -58,32 +58,32 @@ class ColonistsGame extends FlameGame with KeyboardEvents { | |||||||
|  |  | ||||||
|   @override |   @override | ||||||
|   KeyEventResult onKeyEvent( |   KeyEventResult onKeyEvent( | ||||||
|     RawKeyEvent event, |     KeyEvent event, | ||||||
|     Set<LogicalKeyboardKey> keysPressed, |     Set<LogicalKeyboardKey> keysPressed, | ||||||
|   ) { |   ) { | ||||||
|     var howMuch = 0.0; |     var howMuch = 0.0; | ||||||
|     if (event is RawKeyDownEvent) { |     if (event is KeyDownEvent) { | ||||||
|       howMuch = 1; |       howMuch = 1; | ||||||
|     } else if (event is RawKeyUpEvent) { |     } else if (event is KeyUpEvent) { | ||||||
|       howMuch = 0; |       howMuch = 0; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|     if (event.data.logicalKey == LogicalKeyboardKey.keyS) { |     if (event.logicalKey == LogicalKeyboardKey.keyS) { | ||||||
|       _downForce = howMuch; |       _downForce = howMuch; | ||||||
|     } else if (event.data.logicalKey == LogicalKeyboardKey.keyW) { |     } else if (event.logicalKey == LogicalKeyboardKey.keyW) { | ||||||
|       _upForce = howMuch; |       _upForce = howMuch; | ||||||
|     } else if (event.data.logicalKey == LogicalKeyboardKey.keyD) { |     } else if (event.logicalKey == LogicalKeyboardKey.keyD) { | ||||||
|       _rightForce = howMuch; |       _rightForce = howMuch; | ||||||
|     } else if (event.data.logicalKey == LogicalKeyboardKey.keyA) { |     } else if (event.logicalKey == LogicalKeyboardKey.keyA) { | ||||||
|       _leftForce = howMuch; |       _leftForce = howMuch; | ||||||
|     } else if (event.data.logicalKey == LogicalKeyboardKey.numpadAdd && |     } else if (event.logicalKey == LogicalKeyboardKey.numpadAdd && | ||||||
|         event is RawKeyDownEvent) { |         event is KeyDownEvent) { | ||||||
|       camera.viewfinder.zoom = min( |       camera.viewfinder.zoom = min( | ||||||
|         camera.viewfinder.zoom + 0.1, |         camera.viewfinder.zoom + 0.1, | ||||||
|         5, |         5, | ||||||
|       ); |       ); | ||||||
|     } else if (event.data.logicalKey == LogicalKeyboardKey.numpadSubtract && |     } else if (event.logicalKey == LogicalKeyboardKey.numpadSubtract && | ||||||
|         event is RawKeyDownEvent) { |         event is KeyDownEvent) { | ||||||
|       camera.viewfinder.zoom = max( |       camera.viewfinder.zoom = max( | ||||||
|         camera.viewfinder.zoom - 0.1, |         camera.viewfinder.zoom - 0.1, | ||||||
|         0.1, |         0.1, | ||||||
|  | |||||||
| @ -7,6 +7,7 @@ version: 1.0.0+1 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|  |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.18.0 |   collection: ^1.18.0 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ repository: https://github.com/flame-engine/flame/blob/main/packages/flame_isola | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=1.17.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.17.1 |   collection: ^1.17.1 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=1.17.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   dev: ^1.0.0 |   dev: ^1.0.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   fast_noise: ^2.0.0 |   fast_noise: ^2.0.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ version: 5.2.0 | |||||||
| homepage: https://github.com/flame-engine/flame/tree/main/packages/flame_riverpod | homepage: https://github.com/flame-engine/flame/tree/main/packages/flame_riverpod | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=1.17.0" |   flutter: ^3.19.0 | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|   flutter: |   flutter: | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.17.1 |   collection: ^1.17.1 | ||||||
|  | |||||||
| @ -6,7 +6,7 @@ version: 1.0.0+1 | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame_splash_screen: ^0.2.0 |   flame_splash_screen: ^0.2.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flutter: |   flutter: | ||||||
|  | |||||||
| @ -10,7 +10,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.10.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.17.1 |   collection: ^1.17.1 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.10.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -5,7 +5,7 @@ publish_to: none | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   flame: ^1.15.0 |   flame: ^1.15.0 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.17.1 |   collection: ^1.17.1 | ||||||
|  | |||||||
| @ -9,7 +9,7 @@ funding: | |||||||
|  |  | ||||||
| environment: | environment: | ||||||
|   sdk: ">=3.0.0 <4.0.0" |   sdk: ">=3.0.0 <4.0.0" | ||||||
|   flutter: ">=3.13.0" |   flutter: ^3.19.0 | ||||||
|  |  | ||||||
| dependencies: | dependencies: | ||||||
|   collection: ^1.17.1 |   collection: ^1.17.1 | ||||||
|  | |||||||
		Reference in New Issue
	
	Block a user
	 Brett Morgan
					Brett Morgan