keyboard.dart 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  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. KeyboardController({this.child});
  8. @override
  9. _KeyboardControllerState createState() => _KeyboardControllerState();
  10. }
  11. class _KeyboardControllerState extends State<KeyboardController> {
  12. @override
  13. void initState() {
  14. super.initState();
  15. // 监听按钮
  16. RawKeyboard.instance.addListener(_onKey);
  17. }
  18. void _onKey(RawKeyEvent event) {
  19. if (event is RawKeyUpEvent) {
  20. return;
  21. }
  22. final key = event.data.physicalKey;
  23. final game = Game.of(context);
  24. if (key == PhysicalKeyboardKey.arrowUp) {
  25. game.rotate();
  26. } else if (key == PhysicalKeyboardKey.arrowDown) {
  27. game.down();
  28. } else if (key == PhysicalKeyboardKey.arrowLeft) {
  29. game.left();
  30. } else if (key == PhysicalKeyboardKey.arrowRight) {
  31. game.right();
  32. } else if (key == PhysicalKeyboardKey.space) {
  33. game.drop();
  34. } else if (key == PhysicalKeyboardKey.keyP) {
  35. game.pauseOrResume();
  36. } else if (key == PhysicalKeyboardKey.keyS) {
  37. game.soundSwitch();
  38. } else if (key == PhysicalKeyboardKey.keyR) {
  39. game.reset();
  40. }
  41. }
  42. @override
  43. void dispose() {
  44. RawKeyboard.instance.removeListener(_onKey);
  45. super.dispose();
  46. }
  47. @override
  48. Widget build(BuildContext context) {
  49. return widget.child;
  50. }
  51. }