Browse Source

Update 优化换笼页面

Yue 5 days ago
parent
commit
72676f466e

+ 0 - 1
UI/CF.APP/chicken_farm/lib/pages/account/config_dialog.dart

@@ -1,6 +1,5 @@
 import 'package:chicken_farm/core/api/api_client.dart';
 import 'package:chicken_farm/core/config/app_config.dart';
-import 'package:chicken_farm/core/services/connectivity_service.dart';
 import 'package:flutter/material.dart';
 
 class ConfigDialog extends StatefulWidget {

+ 55 - 51
UI/CF.APP/chicken_farm/lib/pages/breeding/cage_change_page.dart

@@ -5,6 +5,7 @@ import 'package:chicken_farm/components/vb_app_bar.dart';
 import 'package:chicken_farm/core/utils/toast.dart';
 import 'package:chicken_farm/core/services/pda/scan_channel.dart';
 import 'package:chicken_farm/components/vb_rfid_field.dart';
+import 'package:go_router/go_router.dart';
 
 class CageChangePage extends StatefulWidget {
   const CageChangePage({super.key});
@@ -48,62 +49,65 @@ class _CageChangePageState extends State<CageChangePage> {
       }
     });
 
-    ScanChannel.openScanHead().then((success) {
-      if (success) {
-        logger.d("扫描头已打开");
-      } else {
-        logger.d("扫描头打开失败");
-      }
-    });
-    // 初始化监听
-    ScanChannel.initScanListener(
-      onScanResult: (result) {
-        if (_scanTag == 1) {
-          // 源笼号
+    // 延迟到下一帧执行,确保页面构建完成后再打开扫描头
+    WidgetsBinding.instance.addPostFrameCallback((_) {
+      ScanChannel.openScanHead().then((success) {
+        if (success) {
+          logger.d("扫描头已打开");
+        } else {
+          ToastUtil.errorAlert("扫描头打开失败");
+          if (mounted) {
+            context.pop();
+          }
+        }
+      });
+
+      // 初始化监听
+      ScanChannel.initScanListener(
+        onScanResult: (result) {
+          if (_scanTag == 1) {
+            // 源笼号
+            setState(() {
+              _sourceCageController.text = result;
+              _isScanningSource = false;
+            });
+            if (_targetCageController.text.isEmpty) {
+              // 源笼号扫描成功后自动延时扫描目标笼号
+              ScanChannel.stopSingleScan();
+              logger.d("自动扫描目标笼号");
+              _targetCageFocusNode.requestFocus();
+              _dealyScanCode(2);
+            }
+          } else if (_scanTag == 2) {
+            // 目标笼号
+            setState(() {
+              _targetCageController.text = result;
+              _isScanningTarget = false;
+            });
+          }
+          // 扫码成功后停止解码(保留扫描头)
+          ScanChannel.stopSingleScan();
+        },
+        onScanError: (error) {
+          logger.d("扫码错误:$error");
           setState(() {
-            _sourceCageController.text = result;
             _isScanningSource = false;
           });
-          if (_targetCageController.text.isEmpty) {
-            // 源笼号扫描成功后自动延时扫描目标笼号
-            ScanChannel.stopSingleScan();
-            logger.d("自动扫描目标笼号");
-            _targetCageFocusNode.requestFocus();
-            _dealyScanCode(2);
+        },
+        onKeyPress: (bool isDouble, String keyCode) {
+          if (isDouble && keyCode == "KEY_619") {
+            _sourceCageController.clear();
+            _targetCageController.clear();
+            _scanTag = 1;
+            ScanChannel.startScan();
+          } else {
+            logger.d("按键:$isDouble $keyCode");
           }
-        } else if (_scanTag == 2) {
-          // 目标笼号
-          setState(() {
-            _targetCageController.text = result;
-            _isScanningTarget = false;
-          });
-        }
-        // 扫码成功后停止解码(保留扫描头)
-        ScanChannel.stopSingleScan();
-      },
-      onScanError: (error) {
-        logger.d("扫码错误:$error");
-        setState(() {
-          _isScanningSource = false;
-        });
-      },
-      onKeyPress: (bool isDouble, String keyCode) {
-        if (isDouble && keyCode == "KEY_619") {
-          _sourceCageController.clear();
-          _targetCageController.clear();
-          _scanTag = 1;
-          ScanChannel.startScan();
-        } else {
-          logger.d("按键:$isDouble $keyCode");
-        }
-      },
-    );
-    _scanTag = 1;
+        },
+      );
+    });
 
-    // 进入页面默认使原笼号获取到焦点
-    // WidgetsBinding.instance.addPostFrameCallback((_) {
-    //   _sourceCageFocusNode.requestFocus();
-    // });
+    _scanTag = 1;
   }
 
   @override