Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

fix!: Migrate from RawKeyEvent to KeyEvent #3002

Merged
Merged
Show file tree
Hide file tree
Changes from 2 commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion doc/tutorials/platformer/app/lib/actors/ember.dart
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,7 @@ class EmberPlayer extends SpriteAnimationComponent
}

@override
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
horizontalDirection = 0;
horizontalDirection += (keysPressed.contains(LogicalKeyboardKey.keyA) ||
keysPressed.contains(LogicalKeyboardKey.arrowLeft))
Expand Down
1 change: 1 addition & 0 deletions doc/tutorials/platformer/app/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ version: 1.0.0+1

environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ^3.19.0-0

dependencies:
flame: ^1.14.0
Expand Down
2 changes: 1 addition & 1 deletion examples/games/padracing/lib/padracing_game.dart
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,7 @@ class PadRacingGame extends Forge2DGame with KeyboardEvents {

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
super.onKeyEvent(event, keysPressed);
Expand Down
2 changes: 1 addition & 1 deletion examples/games/trex/lib/trex_game.dart
Original file line number Diff line number Diff line change
Expand Up @@ -88,7 +88,7 @@ class TRexGame extends FlameGame

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
if (keysPressed.contains(LogicalKeyboardKey.enter) ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import 'package:flutter/services.dart';

class CameraFollowAndWorldBoundsExample extends FlameGame
with HasKeyboardHandlerComponents {
static const description = '''
static const description = '''
This example demonstrates camera following the player, but also obeying the
world bounds (which are set up to leave a small margin around the visible
part of the ground).
Expand Down Expand Up @@ -142,8 +142,8 @@ class Player extends PositionComponent with KeyboardHandler {
}

@override
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
final isKeyDown = event is RawKeyDownEvent;
bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
final isKeyDown = event is KeyDownEvent;
final keyLeft = (event.logicalKey == LogicalKeyboardKey.arrowLeft) ||
(event.logicalKey == LogicalKeyboardKey.keyA);
final keyRight = (event.logicalKey == LogicalKeyboardKey.arrowRight) ||
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -155,10 +155,10 @@ class CoordinateSystemsExample extends FlameGame
/// Camera controls.
@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
final isKeyDown = event is RawKeyDownEvent;
final isKeyDown = event is KeyDownEvent;

if (event.logicalKey == LogicalKeyboardKey.keyA) {
cameraVelocity.x = isKeyDown ? -1 : 0;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -100,8 +100,8 @@ class MovableEmber extends Ember<FollowComponentExample>
}

@override
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
final isKeyDown = event is RawKeyDownEvent;
bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
final isKeyDown = event is KeyDownEvent;

final bool handled;
if (event.logicalKey == LogicalKeyboardKey.keyA) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -142,7 +142,7 @@ Press T button to toggle player to collide with other objects.

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
for (final key in keysPressed) {
Expand Down
6 changes: 3 additions & 3 deletions examples/lib/stories/input/keyboard_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,14 @@ class KeyboardExample extends FlameGame with KeyboardEvents {

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
final isKeyDown = event is RawKeyDownEvent;
final isKeyDown = event is KeyDownEvent;

// Avoiding repeat event as we are interested only in
// key up and key down event.
if (!event.repeat) {
if (key is! KeyRepeatEvent) {
if (event.logicalKey == LogicalKeyboardKey.keyA) {
_direction.x += isKeyDown ? -1 : 1;
} else if (event.logicalKey == LogicalKeyboardKey.keyD) {
Expand Down
4 changes: 2 additions & 2 deletions examples/lib/stories/system/without_flame_game_example.dart
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ class NoFlameGameExample extends Game with KeyboardEvents {

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
final isKeyDown = event is RawKeyDownEvent;
final isKeyDown = event is KeyDownEvent;

if (event.logicalKey == LogicalKeyboardKey.keyA) {
velocity.x = isKeyDown ? -1 : 0;
Expand Down
2 changes: 1 addition & 1 deletion examples/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ version: 0.1.0

environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ">=3.13.0"
flutter: ^3.19.0-0

dependencies:
dashbook: ^0.1.12
Expand Down
2 changes: 1 addition & 1 deletion packages/flame/lib/src/components/core/component_key.dart
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,6 @@ class ComponentKey {
int get hashCode => _internalHash;

@override
bool operator ==(dynamic other) =>
bool operator ==(Object other) =>
other is ComponentKey && other._internalHash == _internalHash;
}
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class KeyboardListenerComponent extends Component with KeyboardHandler {
final Map<LogicalKeyboardKey, KeyHandlerCallback> _keyDown;

@override
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
final isUp = event is RawKeyUpEvent;
bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
final isUp = event is KeyUpEvent;

final handlers = isUp ? _keyUp : _keyDown;
final handler = handlers[event.logicalKey];
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import 'package:flutter/services.dart';
/// Must be used in components that can only be added to games that are mixed
/// with [HasKeyboardHandlerComponents].
mixin KeyboardHandler on Component {
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
return true;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@ class DoubleTapDispatcherKey implements ComponentKey {
int get hashCode => 20260645; // 'DoubleTapDispatcherKey' as hashCode

@override
bool operator ==(dynamic other) =>
bool operator ==(Object other) =>
spydon marked this conversation as resolved.
Show resolved Hide resolved
other is DoubleTapDispatcherKey && other.hashCode == hashCode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ class MultiDragDispatcherKey implements ComponentKey {
int get hashCode => 91604879; // 'MultiDragDispatcherKey' as hashCode

@override
bool operator ==(dynamic other) =>
bool operator ==(Object other) =>
other is MultiDragDispatcherKey && other.hashCode == hashCode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ class MultiTapDispatcherKey implements ComponentKey {
int get hashCode => 401913931; // 'MultiTapDispatcherKey' as hashCode

@override
bool operator ==(dynamic other) =>
bool operator ==(Object other) =>
other is MultiTapDispatcherKey && other.hashCode == hashCode;
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -66,6 +66,6 @@ class MouseMoveDispatcherKey implements ComponentKey {
int get hashCode => 'MouseMoveDispatcherKey'.hashCode;

@override
bool operator ==(dynamic other) =>
bool operator ==(Object other) =>
other is MouseMoveDispatcherKey && other.hashCode == hashCode;
}
9 changes: 6 additions & 3 deletions packages/flame/lib/src/game/game_widget/game_widget.dart
Original file line number Diff line number Diff line change
Expand Up @@ -311,15 +311,18 @@ class GameWidgetState<T extends Game> extends State<GameWidget<T>> {
}
}

KeyEventResult _handleKeyEvent(FocusNode focusNode, RawKeyEvent event) {
KeyEventResult _handleKeyEvent(FocusNode focusNode, KeyEvent event) {
final game = currentGame;

if (!_focusNode.hasPrimaryFocus) {
return KeyEventResult.ignored;
}

if (game is KeyboardEvents) {
return game.onKeyEvent(event, RawKeyboard.instance.keysPressed);
return game.onKeyEvent(
event,
HardwareKeyboard.instance.logicalKeysPressed,
);
}
return KeyEventResult.handled;
}
Expand Down Expand Up @@ -361,7 +364,7 @@ class GameWidgetState<T extends Game> extends State<GameWidget<T>> {
focusNode: _focusNode,
autofocus: widget.autofocus,
descendantsAreFocusable: true,
onKey: _handleKeyEvent,
onKeyEvent: _handleKeyEvent,
child: MouseRegion(
cursor: currentGame.mouseCursor,
child: Directionality(
Expand Down
4 changes: 2 additions & 2 deletions packages/flame/lib/src/game/mixins/keyboard.dart
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ mixin HasKeyboardHandlerComponents<W extends World> on FlameGame<W>
@override
@mustCallSuper
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
final blockedPropagation = !propagateToChildren<KeyboardHandler>(
Expand All @@ -34,7 +34,7 @@ mixin HasKeyboardHandlerComponents<W extends World> on FlameGame<W>
/// Override [onKeyEvent] to customize the keyboard handling behavior.
mixin KeyboardEvents on Game {
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
assert(
Expand Down
2 changes: 1 addition & 1 deletion packages/flame/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ funding:

environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ">=3.13.0"
flutter: ^3.19.0-0

dependencies:
collection: ^1.17.1
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,15 +9,15 @@ abstract class _KeyCallStub {

class KeyCallStub extends Mock implements _KeyCallStub {}

class MockRawKeyUpEvent extends Mock implements RawKeyUpEvent {
class MockKeyUpEvent extends Mock implements KeyUpEvent {
@override
String toString({DiagnosticLevel minLevel = DiagnosticLevel.info}) {
return super.toString();
}
}

RawKeyUpEvent _mockKeyUp(LogicalKeyboardKey key) {
final event = MockRawKeyUpEvent();
KeyUpEvent _mockKeyUp(LogicalKeyboardKey key) {
final event = MockKeyUpEvent();
when(() => event.logicalKey).thenReturn(key);
return event;
}
Expand Down
6 changes: 0 additions & 6 deletions packages/flame/test/extensions/_help.dart

This file was deleted.

4 changes: 1 addition & 3 deletions packages/flame/test/extensions/matrix4_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ import 'package:flame_test/flame_test.dart';
import 'package:mocktail/mocktail.dart';
import 'package:test/test.dart';

import '_help.dart';

void main() {
group('Matrix4Extension', () {
final matrix4 = Matrix4.fromList([
Expand Down Expand Up @@ -106,4 +104,4 @@ void main() {

// This need the mixin because Mock's == parameter is not nullable
domesticmouse marked this conversation as resolved.
Show resolved Hide resolved
// but Matrix4's == parameter is nullable
class MockMatrix4 extends Mock with NullableEqualsMixin implements Matrix4 {}
class MockMatrix4 extends Mock implements Matrix4 {}
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ class _KeyboardEventsGame extends FlameGame with KeyboardEvents {

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
this.keysPressed.add(event.character ?? 'none');
Expand All @@ -25,7 +25,7 @@ class _KeyboardHandlerComponent extends Component with KeyboardHandler {
final List<String> keysPressed = [];

@override
bool onKeyEvent(RawKeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
bool onKeyEvent(KeyEvent event, Set<LogicalKeyboardKey> keysPressed) {
this.keysPressed.add(event.character ?? 'none');
return false;
}
Expand Down
6 changes: 3 additions & 3 deletions packages/flame/test/game/game_widget/game_widget_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@ class _GameWithKeyboardEvents extends FlameGame with KeyboardEvents {

@override
KeyEventResult onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
keyEvents.add(event.logicalKey);
Expand Down Expand Up @@ -443,7 +443,7 @@ void main() {
testWidgets('overlay handles keys', (tester) async {
final overlayKeyEvents = <LogicalKeyboardKey>[];
final overlayFocusNode = FocusNode(
onKey: (_, keyEvent) {
onKeyEvent: (_, keyEvent) {
overlayKeyEvents.add(keyEvent.logicalKey);
return KeyEventResult.ignored;
},
Expand Down Expand Up @@ -475,7 +475,7 @@ void main() {
await simulateKeyDownEvent(LogicalKeyboardKey.keyA);
await tester.pump();

expect(game.keyEvents, <RawKeyEvent>[]);
expect(game.keyEvents, <KeyEvent>[]);
expect(overlayKeyEvents, [LogicalKeyboardKey.keyA]);
});
});
Expand Down
20 changes: 10 additions & 10 deletions packages/flame/test/game/mixins/keyboard_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,27 +3,23 @@ import 'package:flame/input.dart';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:flutter_test/flutter_test.dart';
import 'package:mocktail/mocktail.dart';

class _ValidGame extends FlameGame with KeyboardEvents {}

class _InvalidGame extends FlameGame
with HasKeyboardHandlerComponents, KeyboardEvents {}

class _MockRawKeyEventData extends Mock implements RawKeyEventData {
@override
String toString({DiagnosticLevel minLevel = DiagnosticLevel.debug}) {
return super.toString();
}
}

void main() {
group('Keyboard events', () {
test(
'game with KeyboardEvents can handle key events',
() {
final validGame = _ValidGame();
final event = RawKeyDownEvent(data: _MockRawKeyEventData());
const event = KeyDownEvent(
physicalKey: PhysicalKeyboardKey.arrowUp,
spydon marked this conversation as resolved.
Show resolved Hide resolved
logicalKey: LogicalKeyboardKey.arrowUp,
timeStamp: Duration.zero,
);

// Should just work with the default implementation
expect(
Expand All @@ -37,7 +33,11 @@ void main() {
'cannot mix KeyboardEvent and HasKeyboardHandlerComponents together',
() {
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
expect(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ class PlayerComponent extends SpriteAnimationComponent

@override
bool onKeyEvent(
RawKeyEvent event,
KeyEvent event,
Set<LogicalKeyboardKey> keysPressed,
) {
if (keysPressed.contains(LogicalKeyboardKey.tab)) {
Expand Down
1 change: 1 addition & 0 deletions packages/flame_bloc/example/pubspec.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ version: 1.0.0+1

environment:
sdk: ">=3.0.0 <4.0.0"
flutter: ^3.19.0-0

dependencies:
equatable: ^2.0.5
Expand Down
Loading
Loading