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.
This commit is contained in:
Misaka_Company
2026-05-18 15:23:56 +08:00
parent a7570891c5
commit 9b9becb008

View File

@@ -83,7 +83,7 @@ class BoxingPage extends StatefulWidget {
State<BoxingPage> createState() => _BoxingPageState(); State<BoxingPage> createState() => _BoxingPageState();
} }
class _BoxingPageState extends State<BoxingPage> { class _BoxingPageState extends State<BoxingPage> with WidgetsBindingObserver {
static const _androidKeyCodeButtonR1 = 103; static const _androidKeyCodeButtonR1 = 103;
final _scannerService = ScannerService(); final _scannerService = ScannerService();
@@ -147,6 +147,7 @@ class _BoxingPageState extends State<BoxingPage> {
@override @override
void initState() { void initState() {
super.initState(); super.initState();
WidgetsBinding.instance.addObserver(this);
final arguments = widget.arguments; final arguments = widget.arguments;
if (arguments != null) { if (arguments != null) {
_mode = arguments.initialMode; _mode = arguments.initialMode;
@@ -163,6 +164,7 @@ class _BoxingPageState extends State<BoxingPage> {
@override @override
void dispose() { void dispose() {
WidgetsBinding.instance.removeObserver(this);
_boxNoController.removeListener(_onBoxNoTextChanged); _boxNoController.removeListener(_onBoxNoTextChanged);
_scanSubscription?.cancel(); _scanSubscription?.cancel();
_focusNode.dispose(); _focusNode.dispose();
@@ -180,6 +182,13 @@ class _BoxingPageState extends State<BoxingPage> {
} }
} }
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
_requestFocus();
}
}
void _onKeyEvent(KeyEvent event) { void _onKeyEvent(KeyEvent event) {
if (event is! KeyDownEvent || _isAutoProcessing) return; if (event is! KeyDownEvent || _isAutoProcessing) return;
if (_isModeSwitchKey(event)) { if (_isModeSwitchKey(event)) {