Browse Source

1、优化所有设备连接过程

guanxinyi 1 year ago
parent
commit
ec6b2a0000

+ 2 - 4
lib/managers/device_controller_manager.dart

@@ -1,17 +1,15 @@
 import 'package:vitalapp/pages/medical/controllers/base.dart';
-import 'package:vnote_device_plugin/consts/status.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/base.dart';
 import 'package:fis_common/logger/logger.dart';
 import 'package:vnote_device_plugin/devices/heart.dart';
 import 'package:vnote_device_plugin/devices/ic_reader.dart';
 import 'package:vnote_device_plugin/devices/nibp.dart';
+import 'package:vnote_device_plugin/devices/sp_o2.dart';
 import 'package:vnote_device_plugin/devices/sugar.dart';
 import 'package:vnote_device_plugin/devices/temp.dart';
 import 'package:vnote_device_plugin/devices/urine.dart';
 import 'package:vnote_device_plugin/devices/weight.dart';
-import 'package:vnote_device_plugin/events/event_type.dart';
-import 'package:vnote_device_plugin/models/exams/heart.dart';
 
 class DeviceControllerManager extends BaseDeviceController<DeviceWorkerBase> {
   DeviceControllerManager(
@@ -63,7 +61,7 @@ class DeviceControllerManager extends BaseDeviceController<DeviceWorkerBase> {
         break;
       //血氧
       case DeviceTypes.SPO2:
-        deviceWorker = NibpDeviceWorker(mac: super.mac, model: model);
+        deviceWorker = SpO2DeviceWorker(mac: super.mac, model: model);
         break;
       //血糖
       case DeviceTypes.SUGAR:

+ 0 - 7
lib/pages/medical/controller.dart

@@ -1,13 +1,10 @@
 import 'dart:convert';
-import 'dart:io';
 
 import 'package:fis_jsonrpc/rpc.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:uuid/uuid.dart';
-import 'package:vitalapp/architecture/storage/storage.dart';
 import 'package:vitalapp/architecture/utils/prompt_box.dart';
-import 'package:vitalapp/architecture/utils/upload.dart';
 import 'package:vitalapp/components/alert_dialog.dart';
 import 'package:vitalapp/database/db.dart';
 import 'package:vitalapp/database/entities/defines.dart';
@@ -15,7 +12,6 @@ import 'package:vitalapp/database/entities/diagnosis.dart';
 import 'package:vitalapp/global.dart';
 import 'package:vitalapp/managers/interfaces/patient.dart';
 import 'package:vitalapp/managers/interfaces/record_data_cache.dart';
-import 'package:vitalapp/rpc.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vitalapp/architecture/defines.dart';
 import 'package:vitalapp/architecture/storage/text_storage.dart';
@@ -120,9 +116,6 @@ class MedicalController extends FControllerBase {
       //   directory: "patient/$patientCode",
       // );
       String? value = Store.resident.residentMedicalData;
-      print('🍖');
-      print(value);
-      print('🍖');
       if (value == null) {
         diagnosisDataValue = {};
         return;

+ 6 - 0
lib/pages/medical/controllers/base.dart

@@ -50,11 +50,13 @@ abstract class BaseDeviceController<T extends DeviceWorkerBase>
   }
 
   Future<void> connect() async {
+    print("开始连接 mac: $mac, model: $model");
     logger.i("开始连接 mac: $mac, model: $model");
     await worker.connect();
   }
 
   Future<void> disconnect() async {
+      print("断开连接 mac: $mac, model: $model");
     logger.i("断开连接 mac: $mac, model: $model");
     await worker.disconnect();
     // 处理设备关闭成功事件
@@ -68,6 +70,7 @@ abstract class BaseDeviceController<T extends DeviceWorkerBase>
   }
 
   void _onConnectFail(_, dynamic error) {
+   print("连接失败 mac: $mac, model: $model");
     logger.i("连接失败 mac: $mac, model: $model");
     connectStatus = WorkerStatus.connectionFailed;
     // 处理连接失败事件
@@ -75,12 +78,15 @@ abstract class BaseDeviceController<T extends DeviceWorkerBase>
 
   void _onConnectSuccess(_, dynamic data) {
     logger.i("连接成功 mac: $mac, model: $model");
+    print("连接成功 mac: $mac, model: $model");
     connectStatus = WorkerStatus.connected;
     // 处理连接成功事件
   }
 
   void _onDisconnected(_, dynamic error) {
     logger.i("连接中断 mac: $mac, model: $model");
+    print("连接中断 mac: $mac, model: $model");
+
     connectStatus = WorkerStatus.disconnected;
     // 处理连接中断事件
   }

+ 36 - 21
lib/pages/medical/widgets/blood_pressure.dart

@@ -13,7 +13,6 @@ import 'package:vitalapp/components/alert_dialog.dart';
 import 'package:vitalapp/managers/interfaces/models/device.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
 import 'package:vitalapp/pages/medical/controller.dart';
-import 'package:vitalapp/pages/medical/controllers/nibp.dart';
 import 'package:vitalapp/pages/medical/models/item.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status.dart';
@@ -182,10 +181,10 @@ class BloodPressure extends StatefulWidget {
   // Map<String, dynamic> currentValue;
   // Function(Map<String, dynamic>) bloodPressure;
   @override
-  State<BloodPressure> createState() => _ExamBloodPressureState();
+  State<BloodPressure> createState() => _BloodPressureState();
 }
 
-class _ExamBloodPressureState extends State<BloodPressure> {
+class _BloodPressureState extends State<BloodPressure> {
   var controller = Get.find<MedicalController>();
   PressureStatus pressureStatus = PressureStatus.left;
   PressureDeviceStatus pressureDeviceStatus = PressureDeviceStatus.start;
@@ -222,6 +221,7 @@ class _ExamBloodPressureState extends State<BloodPressure> {
     _connectStatus = nibp.connectStatus;
 
     loadListeners();
+    connect();
   }
 
   void loadListeners() {
@@ -230,28 +230,50 @@ class _ExamBloodPressureState extends State<BloodPressure> {
     worker!.connectErrorEvent.addListener(_onConnectFail);
     worker!.connectedEvent.addListener(_onConnectSuccess);
     worker!.disconnectedEvent.addListener(_onDisconnected);
-    worker!.connect();
+  }
+
+  void releaseListeners() {
+    if (worker != null) {
+      worker!.connectErrorEvent.removeListener(_onConnectFail);
+      worker!.connectedEvent.removeListener(_onConnectSuccess);
+      worker!.liveUpdateEvent.removeListener(_onLiveUpdate);
+      worker!.resultUpdateEvent.removeListener(_onSuccess);
+      worker!.disconnectedEvent.removeListener(_onDisconnected);
+    }
+  }
+
+  Future<void> connect() async {
+    try {
+      if (worker != null) {
+        await worker!.connect();
+      }
+    } catch (err) {
+      print(err);
+    }
   }
 
   Future<void> disconnect() async {
     try {
       if (worker != null) {
         await worker!.disconnect();
-
-        worker!.connectErrorEvent.removeListener(_onConnectFail);
-        worker!.connectedEvent.removeListener(_onConnectSuccess);
-        worker!.liveUpdateEvent.removeListener(_onLiveUpdate);
-        worker!.resultUpdateEvent.removeListener(_onSuccess);
-        worker!.disconnectedEvent.removeListener(_onDisconnected);
       }
     } catch (err) {
       print(err);
     }
   }
 
+  /// 尝试重连
+  Future<void> tryReconnect() async {
+    if (worker != null) {
+      await disconnect();
+      await connect();
+    }
+  }
+
   @override
   void dispose() {
     nibp.dispose();
+    releaseListeners();
     disconnect();
     worker?.dispose();
     super.dispose();
@@ -288,8 +310,7 @@ class _ExamBloodPressureState extends State<BloodPressure> {
       print('连接设备失败:${worker!.mac},$errorCount,${DateTime.now()}');
       logger.i('连接设备失败:${worker!.mac},$errorCount,${DateTime.now()}');
       errorCount++;
-      disconnect();
-      loadListeners();
+      tryReconnect();
     } else {
       print('连接设备失败:${worker!.mac},$errorCount,${DateTime.now()}');
       logger.i('连接设备失败:${worker!.mac},$errorCount,${DateTime.now()}');
@@ -302,14 +323,8 @@ class _ExamBloodPressureState extends State<BloodPressure> {
   void _onDisconnected(sender, e) {
     logger.i("设备连接中断:${worker!.mac}");
     print('设备连接中断:${worker!.mac}');
-    if (errorCount < 3) {
-      print('设备连接中断:${worker!.mac},$errorCount');
-      errorCount++;
-      disconnect();
-      loadListeners();
-    } else {
-      isConnectFail = true;
-    }
+    tryReconnect();
+    errorCount = 0;
     _connectStatus = WorkerStatus.disconnected;
     setState(() {});
   }
@@ -426,7 +441,7 @@ class _ExamBloodPressureState extends State<BloodPressure> {
             onPressed: () {
               controller.diagnosisDataValue['NIBP'] = null;
               liveValue = 0;
-              worker?.connect();
+              tryReconnect();
               setState(() {
                 _connectStatus = WorkerStatus.connecting;
                 isConnectFail = false;

+ 21 - 13
lib/pages/medical/widgets/blood_sugar.dart

@@ -11,7 +11,6 @@ import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
 
 import 'package:vitalapp/components/dialog_number.dart';
 import 'package:vitalapp/pages/medical/controller.dart';
-import 'package:vitalapp/pages/medical/controllers/sugar.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status.dart';
 import 'package:fis_common/logger/logger.dart';
@@ -51,7 +50,6 @@ class _ExamBloodSugarState extends State<BloodSugar> {
     worker!.disconnectedEvent.addListener(_onDisconnected);
     worker!.warnEvent.addListener(_onWarn);
     worker!.statusEvent.addListener(_onstatus);
-    worker!.connect();
   }
 
   Future<void> currentDevice() async {
@@ -68,6 +66,15 @@ class _ExamBloodSugarState extends State<BloodSugar> {
     _connectStatus = sugar.connectStatus;
 
     loadListeners();
+    connect();
+  }
+
+  /// 尝试重连
+  Future<void> tryReconnect() async {
+    if (worker != null) {
+      await disconnect();
+      await connect();
+    }
   }
 
   Future<void> initSugar() async {
@@ -84,7 +91,12 @@ class _ExamBloodSugarState extends State<BloodSugar> {
   Future<void> disconnect() async {
     if (worker != null) {
       await worker!.disconnect();
-      releaseListeners();
+    }
+  }
+
+  Future<void> connect() async {
+    if (worker != null) {
+      await worker!.connect();
     }
   }
 
@@ -99,6 +111,8 @@ class _ExamBloodSugarState extends State<BloodSugar> {
 
   @override
   void dispose() {
+    sugar.dispose();
+    releaseListeners();
     disconnect();
     worker?.dispose();
     super.dispose();
@@ -128,8 +142,7 @@ class _ExamBloodSugarState extends State<BloodSugar> {
     logger.i("连接设备失败:${worker!.mac}");
     if (errorCount < 3) {
       errorCount++;
-      disconnect();
-      loadListeners();
+      tryReconnect();
     } else {
       isConnectFail = true;
     }
@@ -153,13 +166,8 @@ class _ExamBloodSugarState extends State<BloodSugar> {
   void _onDisconnected(sender, e) {
     print('设备连接中断');
     logger.i("设备连接中断:${worker!.mac}");
-    if (errorCount < 3) {
-      errorCount++;
-      disconnect();
-      loadListeners();
-    } else {
-      isConnectFail = true;
-    }
+    errorCount = 0;
+    tryReconnect();
     _bloodStatus = '';
 
     _connectStatus = WorkerStatus.disconnected;
@@ -226,7 +234,7 @@ class _ExamBloodSugarState extends State<BloodSugar> {
           ),
           IconButton(
             onPressed: () {
-              worker?.connect();
+              tryReconnect();
               setState(() {
                 _connectStatus = WorkerStatus.connecting;
                 isConnectFail = false;

+ 14 - 13
lib/pages/medical/widgets/body_bmi.dart

@@ -9,7 +9,6 @@ import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
 
 import 'package:vitalapp/components/dialog_number.dart';
 import 'package:vitalapp/pages/medical/controller.dart';
-import 'package:vitalapp/pages/medical/controllers/bmi.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status.dart';
 import 'package:vitalapp/pages/medical/widgets/side_bar.dart';
@@ -48,10 +47,17 @@ class _ExamBodyWeightState extends State<BodyWeight> {
     await worker!.connect();
   }
 
+  /// 尝试重连
+  Future<void> tryReconnect() async {
+    if (worker != null) {
+      await disconnect();
+      await connect();
+    }
+  }
+
   Future<void> disconnect() async {
     if (worker != null) {
       await worker!.disconnect();
-      releaseListeners();
     }
   }
 
@@ -65,6 +71,7 @@ class _ExamBodyWeightState extends State<BodyWeight> {
   @override
   void dispose() {
     bmi.dispose();
+    releaseListeners();
     disconnect();
     worker?.dispose();
     super.dispose();
@@ -75,7 +82,6 @@ class _ExamBodyWeightState extends State<BodyWeight> {
     worker!.connectErrorEvent.addListener(_onConnectFail);
     worker!.connectedEvent.addListener(_onConnectSuccess);
     worker!.disconnectedEvent.addListener(_onDisconnected);
-    worker!.connect();
   }
 
   Future<void> currentDevice() async {
@@ -91,6 +97,7 @@ class _ExamBodyWeightState extends State<BodyWeight> {
     _connectStatus = bmi.connectStatus;
 
     loadListeners();
+    connect();
   }
 
   Future<void> initBmi() async {
@@ -134,8 +141,7 @@ class _ExamBodyWeightState extends State<BodyWeight> {
     logger.i("连接设备失败:${worker!.mac}");
     if (errorCount < 3) {
       errorCount++;
-      disconnect();
-      loadListeners();
+      tryReconnect();
     } else {
       isConnectFail = true;
     }
@@ -146,13 +152,8 @@ class _ExamBodyWeightState extends State<BodyWeight> {
   void _onDisconnected(sender, e) {
     print('设备连接中断');
     logger.i("设备连接中断:${worker!.mac}");
-    if (errorCount < 3) {
-      errorCount++;
-      disconnect();
-      loadListeners();
-    } else {
-      isConnectFail = true;
-    }
+    tryReconnect();
+    errorCount = 0;
     _connectStatus = WorkerStatus.disconnected;
 
     setState(() {});
@@ -219,7 +220,7 @@ class _ExamBodyWeightState extends State<BodyWeight> {
           ),
           IconButton(
             onPressed: () {
-              worker?.connect();
+              tryReconnect();
               setState(() {
                 _connectStatus = WorkerStatus.connecting;
                 isConnectFail = false;

+ 21 - 15
lib/pages/medical/widgets/body_temperature.dart

@@ -8,7 +8,6 @@ import 'package:vitalapp/components/dialog_number.dart';
 import 'package:vitalapp/managers/interfaces/models/device.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
 import 'package:vitalapp/pages/medical/controller.dart';
-import 'package:vitalapp/pages/medical/controllers/temp.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status.dart';
 import 'package:fis_common/logger/logger.dart';
@@ -61,6 +60,7 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
     connectStatus = temp.connectStatus;
 
     loadListeners();
+    connect();
   }
 
   Future<void> initTemperature() async {
@@ -77,13 +77,17 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
     worker!.disconnectedEvent.addListener(_onDisconnected);
     worker!.tempTooLowEvent.addListener(_onTempTooLowOrTooHeigh);
     worker!.tempTooHighEvent.addListener(_onTempTooLowOrTooHeigh);
-    worker!.connect();
   }
 
   Future<void> disconnect() async {
     if (worker != null) {
       await worker!.disconnect();
-      releaseListeners();
+    }
+  }
+
+  Future<void> connect() async {
+    if (worker != null) {
+      await worker!.connect();
     }
   }
 
@@ -97,8 +101,18 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
     // controller.deviceCloseSuccessEvent.removeListener(_onDeviceCloseSuccess);
   }
 
+  /// 尝试重连
+  Future<void> tryReconnect() async {
+    if (worker != null) {
+      await disconnect();
+      await connect();
+    }
+  }
+
   @override
   void dispose() {
+    temp.dispose();
+    releaseListeners();
     disconnect();
     worker?.dispose();
     super.dispose();
@@ -126,8 +140,7 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
     logger.i("连接设备失败:${worker!.mac}");
     if (errorCount < 3) {
       errorCount++;
-      loadListeners();
-      worker?.connect();
+      tryReconnect();
     } else {
       isConnectFail = true;
     }
@@ -146,15 +159,8 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
   void _onDisconnected(sender, e) {
     print('设备连接中断');
     logger.i("设备连接中断:${worker!.mac}");
-    if (errorCount < 3) {
-      logger.i("设备连接中断:${worker!.mac},$errorCount");
-      errorCount++;
-      disconnect();
-      loadListeners();
-    } else {
-      logger.i("设备连接中断:${worker!.mac},$errorCount");
-      isConnectFail = true;
-    }
+    errorCount = 0;
+    tryReconnect();
     connectStatus = WorkerStatus.disconnected;
     setState(() {});
   }
@@ -184,7 +190,7 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
           ),
           IconButton(
             onPressed: () {
-              worker?.connect();
+              tryReconnect();
               setState(() {
                 connectStatus = WorkerStatus.connecting;
                 isConnectFail = false;

+ 21 - 13
lib/pages/medical/widgets/bool_oxygen.dart

@@ -8,7 +8,6 @@ import 'package:vnote_device_plugin/devices/sp_o2.dart';
 import 'package:vnote_device_plugin/models/exams/sp_o2.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
 import 'package:vitalapp/pages/medical/controller.dart';
-import 'package:vitalapp/pages/medical/controllers/oxygen.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status.dart';
 import 'package:vitalapp/pages/medical/widgets/side_bar.dart';
@@ -41,6 +40,8 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
 
   @override
   void dispose() {
+    spo2.dispose();
+    releaseListeners();
     disconnect();
     worker?.dispose();
     super.dispose();
@@ -63,6 +64,7 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
     worker = spo2.worker as SpO2DeviceWorker;
     _connectStatus = spo2.connectStatus;
     loadListeners();
+    connect();
   }
 
   Future<void> initData() async {
@@ -79,7 +81,6 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
     worker!.connectErrorEvent.addListener(_onConnectFail);
     worker!.connectedEvent.addListener(_onConnectSuccess);
     worker!.disconnectedEvent.addListener(_onDisconnected);
-    worker!.connect();
   }
 
   void releaseListeners() {
@@ -92,7 +93,20 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
   Future<void> disconnect() async {
     if (worker != null) {
       await worker!.disconnect();
-      releaseListeners();
+    }
+  }
+
+  Future<void> connect() async {
+    if (worker != null) {
+      await worker!.connect();
+    }
+  }
+
+  /// 尝试重连
+  Future<void> tryReconnect() async {
+    if (worker != null) {
+      await disconnect();
+      await connect();
     }
   }
 
@@ -115,8 +129,7 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
 
     if (errorCount < 3) {
       errorCount++;
-      disconnect();
-      loadListeners();
+      tryReconnect();
     } else {
       isConnectFail = true;
     }
@@ -136,13 +149,8 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
   void _onDisconnected(sender, e) {
     print('设备连接中断');
     logger.i("设备连接中断:${worker!.mac}");
-    if (errorCount < 3) {
-      errorCount++;
-      disconnect();
-      loadListeners();
-    } else {
-      isConnectFail = true;
-    }
+    tryReconnect();
+    errorCount = 0;
     _connectStatus = WorkerStatus.disconnected;
     setState(() {});
   }
@@ -191,7 +199,7 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
           ),
           IconButton(
             onPressed: () {
-              worker?.connect();
+              tryReconnect();
               setState(() {
                 _connectStatus = WorkerStatus.connecting;
                 isConnectFail = false;

+ 22 - 17
lib/pages/medical/widgets/heart_rate.dart

@@ -3,13 +3,12 @@ import 'dart:convert';
 import 'package:fis_common/logger/logger.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
-import 'package:path_provider/path_provider.dart';
 import 'package:vitalapp/global.dart';
+import 'package:vitalapp/managers/device_controller_manager.dart';
 import 'package:vitalapp/managers/interfaces/data_convert.dart';
 import 'package:vitalapp/managers/interfaces/models/device.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
 import 'package:vitalapp/pages/medical/controller.dart';
-import 'package:vitalapp/pages/medical/controllers/heart.dart';
 import 'package:vitalapp/pages/medical/models/worker.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status.dart';
 import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
@@ -33,8 +32,7 @@ class _HeartRateState extends State<HeartRate> {
   final MedicalController medicalController = Get.find<MedicalController>();
   final IDataConvertManager dataConvertManager =
       Get.find<IDataConvertManager>();
-
-  late HeartDeviceController heartDeviceController;
+  late DeviceControllerManager heart;
   late HeartDeviceWorker worker;
   WorkerStatus connectStatus = WorkerStatus.connecting;
   List<int> ecgPoint = [];
@@ -246,25 +244,36 @@ class _HeartRateState extends State<HeartRate> {
       setState(() {});
       return;
     }
-    heartDeviceController = HeartDeviceController(device.model, device.mac);
-    worker = heartDeviceController.worker;
-    connectStatus = heartDeviceController.connectStatus;
+    heart =
+        DeviceControllerManager(DeviceTypes.HEART, device.model, device.mac);
+    worker = heart.worker as HeartDeviceWorker;
+    connectStatus = heart.connectStatus;
 
     loadListeners();
-    worker.connect();
+    connect();
   }
 
   /// 尝试重连
   Future<void> tryReconnect() async {
+    await disconnect();
+    await connect();
+  }
+
+  Future<void> disconnect() async {
     await worker.disconnect();
+  }
+
+  Future<void> connect() async {
     await worker.connect();
   }
 
   @override
-  void dispose() async {
-    super.dispose();
+  void dispose() {
+    heart.dispose();
     releaseListeners();
-    await worker.disconnect();
+    disconnect();
+    worker.dispose();
+    super.dispose();
   }
 
   /// 重置数据以及心电图
@@ -388,12 +397,8 @@ class _HeartRateState extends State<HeartRate> {
   void _onDisconnected(sender, e) async {
     print('设备连接中断');
     logger.i("设备连接中断:${worker.mac}");
-    if (errorCount < 3) {
-      errorCount++;
-      await tryReconnect();
-    } else {
-      isConnectFail = true;
-    }
+    await tryReconnect();
+    errorCount = 0;
     connectStatus = WorkerStatus.disconnected;
     setState(() {});
   }

+ 13 - 2
lib/pages/medical/widgets/urinalysis.dart

@@ -114,16 +114,27 @@ class _ExamUrinalysisState extends State<Urinalysis> {
       if (connectStatus == WorkerStatus.disconnected ||
           connectStatus == WorkerStatus.connectionFailed ||
           connectStatus == WorkerStatus.connecting) {
-        await worker.connect();
+        await disconnect();
+        await connect();
       }
     });
   }
 
+  Future<void> disconnect() async {
+    await worker.disconnect();
+  }
+
+  Future<void> connect() async {
+    await worker.connect();
+  }
+
   @override
   void dispose() async {
     controller.changePatient.removeListener(_onPatientChange);
+    urinaly.dispose();
     releaseListeners();
-    await worker.disconnect();
+    disconnect();
+    worker.dispose();
 
     super.dispose();
   }

+ 1 - 1
pubspec.yaml

@@ -49,7 +49,7 @@ dependencies:
   vnote_device_plugin:
     git:
       url: http://git.ius.plus/Project-Vital/FlutterDevicePlugin.git
-      ref: 6f5f3a3
+      ref: 4c5cdcc368
     # path: ..\FlutterDevicePlugin
   vital_local_database:
     git: