From 5b595c3f31485773ce0e1f472e4b0a123f431ce4 Mon Sep 17 00:00:00 2001 From: Shawn Date: Wed, 29 Nov 2023 16:00:27 -0700 Subject: [PATCH] Add fullscreen keyboard listener --- .../common/fullscreen_keyboard_listener.dart | 39 +++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 lib/ui/common/fullscreen_keyboard_listener.dart diff --git a/lib/ui/common/fullscreen_keyboard_listener.dart b/lib/ui/common/fullscreen_keyboard_listener.dart new file mode 100644 index 00000000..e4401af7 --- /dev/null +++ b/lib/ui/common/fullscreen_keyboard_listener.dart @@ -0,0 +1,39 @@ +import 'package:wonders/common_libs.dart'; + +class FullScreenKeyboardListener extends StatefulWidget { + const FullScreenKeyboardListener({super.key, required this.child, this.onKeyDown, this.onKeyUp}); + final Widget child; + final bool Function(KeyDownEvent event)? onKeyDown; + final bool Function(KeyUpEvent event)? onKeyUp; + + @override + State createState() => _FullScreenKeyboardListenerState(); +} + +class _FullScreenKeyboardListenerState extends State { + @override + void initState() { + super.initState(); + ServicesBinding.instance.keyboard.addHandler(_handleKey); + } + + @override + void dispose() { + ServicesBinding.instance.keyboard.removeHandler(_handleKey); + super.dispose(); + } + + bool _handleKey(KeyEvent event) { + bool result = false; + if (event is KeyDownEvent && widget.onKeyDown != null) { + result = widget.onKeyDown!.call(event); + } + if (event is KeyUpEvent && widget.onKeyUp != null) { + result = widget.onKeyUp!.call(event); + } + return result; + } + + @override + Widget build(BuildContext context) => widget.child; +}