keyboard.dart 1.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. import 'package:flutter/material.dart';
  2. import 'package:flutter/services.dart';
  3. import 'gamer.dart';
  4. ///keyboard controller to play game
  5. class KeyboardController extends StatefulWidget {
  6. final Widget child;
  7. const KeyboardController({super.key, required this.child});
  8. @override
  9. State<KeyboardController> createState() => _KeyboardControllerState();
  10. }
  11. class _KeyboardControllerState extends State<KeyboardController> {
  12. @override
  13. void initState() {
  14. super.initState();
  15. RawKeyboard.instance.addListener(_onKey);
  16. }
  17. void _onKey(RawKeyEvent event) {
  18. if (event is RawKeyUpEvent) {
  19. return;
  20. }
  21. final key = event.data.logicalKey;
  22. final game = Game.of(context);
  23. if (key == LogicalKeyboardKey.arrowUp) {
  24. game.rotate();
  25. } else if (key == LogicalKeyboardKey.arrowDown) {
  26. game.down();
  27. } else if (key == LogicalKeyboardKey.arrowLeft) {
  28. game.left();
  29. } else if (key == LogicalKeyboardKey.arrowRight) {
  30. game.right();
  31. } else if (key == LogicalKeyboardKey.space) {
  32. game.drop();
  33. } else if (key == LogicalKeyboardKey.keyP) {
  34. game.pauseOrResume();
  35. } else if (key == LogicalKeyboardKey.keyS) {
  36. game.soundSwitch();
  37. } else if (key == LogicalKeyboardKey.keyR) {
  38. game.reset();
  39. }
  40. }
  41. @override
  42. void dispose() {
  43. RawKeyboard.instance.removeListener(_onKey);
  44. super.dispose();
  45. }
  46. @override
  47. Widget build(BuildContext context) {
  48. return widget.child;
  49. }
  50. }