feat(android): add attachment boxing FJ- scan and submit

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
Misaka_Company
2026-08-12 15:02:00 +08:00
parent 6b05d6c0e3
commit 15c29bceb8
5 changed files with 351 additions and 0 deletions

View File

@@ -7,6 +7,7 @@ import 'package:flutter/services.dart';
import 'package:pad_scanner/services/scanner_service.dart';
import 'package:pad_scanner/services/code_parser.dart';
import 'package:pad_scanner/services/api_service.dart';
import 'package:pad_scanner/services/app_config_service.dart';
import 'package:pad_scanner/services/boxing_context.dart';
import 'package:pad_scanner/services/feedback_service.dart';
import 'package:pad_scanner/pages/boxing/boxing_api_actions.dart';
@@ -16,6 +17,7 @@ import 'package:pad_scanner/pages/boxing/boxing_calculations.dart'
as boxing_calculations;
import 'package:pad_scanner/pages/boxing/boxing_models.dart';
import 'package:pad_scanner/pages/boxing/boxing_status_presenter.dart';
import 'package:pad_scanner/pages/boxing/dialogs/attachment_category_picker.dart';
import 'package:pad_scanner/pages/boxing/dialogs/cross_paichan_dialog.dart';
import 'package:pad_scanner/pages/boxing/widgets/boxing_shared_widgets.dart';
import 'package:pad_scanner/pages/boxing/widgets/boxing_notice_banners.dart';
@@ -107,6 +109,15 @@ class _BoxingPageState extends State<BoxingPage> with WidgetsBindingObserver {
// 多码凑箱:已完成装箱时可跳转的箱号
int? _completedJumpBoxNo;
// 附件装箱上下文
int? _attachmentCategoryId; // currently selected attachment category
// ignore: unused_field -- for display in status bar (consumed by later task)
String? _attachmentCategoryName;
// ignore: unused_field -- expected_qty for this category (later task)
int? _attachmentExpectedQty;
// ignore: unused_field -- already boxed qty for this category (later task)
int? _attachmentBoxedQty;
@override
void initState() {
super.initState();
@@ -148,6 +159,12 @@ class _BoxingPageState extends State<BoxingPage> with WidgetsBindingObserver {
}
}
Future<String?> _baseUrl() async {
final url = await AppConfigService().getString('api_url');
if (url == null || url.isEmpty) return null;
return url;
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.resumed) {
@@ -244,6 +261,10 @@ class _BoxingPageState extends State<BoxingPage> with WidgetsBindingObserver {
_isDuplicateBoxNo = false;
_statusOverrideText = null;
_statusOverrideDot = null;
_attachmentCategoryId = null;
_attachmentCategoryName = null;
_attachmentExpectedQty = null;
_attachmentBoxedQty = null;
}
// === 重复箱号检测 ===