feat: support box-number navigation for completed multi-code boxing & unify key handling

- In multi-code boxing mode, scanning a completed total-row number shows a
  clickable warning banner; clicking it or pressing P4 navigates to that
  box number to view boxing details.
- Unify key handling across all pages to LogicalKeyboardKey named constants,
  removing the _androidKeyCodeFromLogicalKey fallback path.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-05-20 14:21:38 +08:00
parent f587194267
commit b1a76287d6
3 changed files with 55 additions and 64 deletions

View File

@@ -20,8 +20,6 @@ class RegistrationPage extends StatefulWidget {
}
class _RegistrationPageState extends State<RegistrationPage> {
static const _androidKeyCodeButtonR1 = 103;
final _scannerService = ScannerService();
final _apiService = ApiService();
final _feedbackService = FeedbackService();
@@ -101,17 +99,7 @@ class _RegistrationPageState extends State<RegistrationPage> {
bool _isLockToggleKey(KeyEvent event) {
final key = event.logicalKey;
return key == LogicalKeyboardKey.select ||
key == LogicalKeyboardKey.gameButtonRight1 ||
_androidKeyCodeFromLogicalKey(key) == _androidKeyCodeButtonR1;
}
int? _androidKeyCodeFromLogicalKey(LogicalKeyboardKey key) {
final keyId = key.keyId;
const androidPlane = LogicalKeyboardKey.androidPlane;
if (keyId >= androidPlane && keyId < androidPlane + 0x100000000) {
return keyId - androidPlane;
}
return null;
key == LogicalKeyboardKey.gameButtonRight1;
}
void _onScan(ScanResult result) {
@@ -676,13 +664,9 @@ class _RegistrationPageState extends State<RegistrationPage> {
focusNode: dialogFocus,
onKeyEvent: (event) {
if (event is! KeyDownEvent) return;
final androidKey =
_androidKeyCodeFromLogicalKey(event.logicalKey);
if (event.logicalKey == LogicalKeyboardKey.arrowUp ||
androidKey == 19) {
if (event.logicalKey == LogicalKeyboardKey.arrowUp) {
setDialogState(() => selectedIndex = 0);
} else if (event.logicalKey == LogicalKeyboardKey.arrowDown ||
androidKey == 20) {
} else if (event.logicalKey == LogicalKeyboardKey.arrowDown) {
setDialogState(() => selectedIndex = 1);
} else if (event.logicalKey == LogicalKeyboardKey.enter) {
selectedIndex == 0 ? dismissAsNo() : confirmSwitch();