From 9b9becb008c99a92e390c8dc603e645d1b65bbf0 Mon Sep 17 00:00:00 2001 From: Misaka_Company Date: Mon, 18 May 2026 15:23:56 +0800 Subject: [PATCH] fix: restore hardware key focus after lock/unlock in boxing screen Add WidgetsBindingObserver lifecycle hook to re-request focus when app resumes, fixing P2 key not working after screen lock. --- lib/pages/boxing_page.dart | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/lib/pages/boxing_page.dart b/lib/pages/boxing_page.dart index 95a3a0a..4369e3b 100644 --- a/lib/pages/boxing_page.dart +++ b/lib/pages/boxing_page.dart @@ -83,7 +83,7 @@ class BoxingPage extends StatefulWidget { State createState() => _BoxingPageState(); } -class _BoxingPageState extends State { +class _BoxingPageState extends State with WidgetsBindingObserver { static const _androidKeyCodeButtonR1 = 103; final _scannerService = ScannerService(); @@ -147,6 +147,7 @@ class _BoxingPageState extends State { @override void initState() { super.initState(); + WidgetsBinding.instance.addObserver(this); final arguments = widget.arguments; if (arguments != null) { _mode = arguments.initialMode; @@ -163,6 +164,7 @@ class _BoxingPageState extends State { @override void dispose() { + WidgetsBinding.instance.removeObserver(this); _boxNoController.removeListener(_onBoxNoTextChanged); _scanSubscription?.cancel(); _focusNode.dispose(); @@ -180,6 +182,13 @@ class _BoxingPageState extends State { } } + @override + void didChangeAppLifecycleState(AppLifecycleState state) { + if (state == AppLifecycleState.resumed) { + _requestFocus(); + } + } + void _onKeyEvent(KeyEvent event) { if (event is! KeyDownEvent || _isAutoProcessing) return; if (_isModeSwitchKey(event)) {