Эх сурвалжийг харах

0016141: 【新建档案】【读卡建档】蓝牙读卡器未开启/已开启,点击读卡建档后,弹窗一直显示“正在连接蓝牙读卡器”

finlay 1 жил өмнө
parent
commit
c469fdaf01

+ 33 - 1
lib/pages/patient/bluetooth_card_reader/controller.dart

@@ -5,6 +5,7 @@ import 'package:vitalapp/managers/device_controller_manager.dart';
 import 'package:vitalapp/managers/interfaces/device.dart';
 import 'package:vitalapp/managers/interfaces/models/device.dart';
 import 'package:vitalapp/pages/controllers/blue_location_mixin.dart';
+import 'package:vitalapp/pages/devices/widgets/bluetooth_reboot.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/patient/card_reader/controller.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
@@ -18,6 +19,7 @@ class BluetoothCardReaderController extends FControllerBase
   ICReaderDeviceWorker? worker;
   DeviceControllerManager? icReader;
   WorkerStatus connectStatus = WorkerStatus.connecting;
+  int errorCount = 0;
 
   /// 是否连接中
   bool get isCardReaderConnecting => connectStatus == WorkerStatus.connecting;
@@ -121,16 +123,44 @@ class BluetoothCardReaderController extends FControllerBase
     update(["bluetooth_card_reader"]);
   }
 
-  void _onConnectFail(sender, e) {
+  Future<void> _onConnectFail(sender, e) async {
     print('连接设备失败');
     logger.i('BluetoothCardReaderController 连接设备失败');
+    if (errorCount < 3) {
+      errorCount++;
+    } else {
+      await Get.dialog(BluetoothRebootDialog());
+      errorCount == 0;
+    }
+    tryReconnect();
     connectStatus = WorkerStatus.connectionFailed;
     update(["bluetooth_card_reader"]);
   }
 
+  /// 尝试重连
+  Future<void> tryReconnect() async {
+    if (worker != null) {
+      await disconnect();
+      await connect();
+    }
+  }
+
+  Future<void> disconnect() async {
+    if (worker != null) {
+      await worker!.disconnect();
+    }
+  }
+
+  Future<void> connect() async {
+    if (worker != null) {
+      await worker!.connect();
+    }
+  }
+
   void _onConnectSuccess(sender, e) {
     logger.i('BluetoothCardReaderController connectStatus:$connectStatus 连接成功');
     logger.i('BluetoothCardReaderController _onConnectSuccess');
+    errorCount = 0;
     connectStatus = WorkerStatus.connected;
     update(["bluetooth_card_reader"]);
   }
@@ -139,6 +169,8 @@ class BluetoothCardReaderController extends FControllerBase
     print('设备连接中断');
     logger.i('BluetoothCardReaderController 设备连接中断');
     connectStatus = WorkerStatus.disconnected;
+    errorCount = 0;
+    tryReconnect();
     update(["bluetooth_card_reader"]);
   }
 

+ 8 - 0
lib/pages/patient/create/controller.dart

@@ -226,6 +226,14 @@ class CreatePatientController extends FControllerBase
   void onReadCardClicked() async {
     final DeviceModel? device = await getDevice(DeviceTypes.IC_READER);
     CardReaderResult? result;
+
+    final envPassed = await checkDeviceConnectEnv();
+    if (envPassed) {
+      result = await Get.dialog<CardReaderResult>(
+        const BluetoothCardReaderDialog(),
+        barrierDismissible: false,
+      );
+    }
     if (device != null) {
       final envPassed = await checkDeviceConnectEnv();
       if (envPassed) {