Parcourir la source

Merge branch 'master' of http://git.ius.plus:88/Project-Vital/VitalApp

gavin.chen il y a 1 an
Parent
commit
35ec4985e2

BIN
assets/images/device/icon/heart.png


+ 1 - 1
lib/pages/check/widgets/exam_device_connect_status/connect_unbound_device.dart

@@ -16,7 +16,7 @@ class UnboundDevice extends StatelessWidget {
     return FittedBox(
       child: Text(
         title,
-        style: const TextStyle(color: Colors.red, fontSize: 20),
+        style: const TextStyle(color: Colors.red, fontSize: 24),
       ),
     );
   }

+ 21 - 6
lib/pages/medical/controller.dart

@@ -56,11 +56,19 @@ class MedicalController extends FControllerBase {
 
   Future<void> initData() async {
     patientCode = Store.user.currentSelectPatientInfo?.code ?? '';
-    var cachedAppDataId = await readCachedAppDataId();
-    if (cachedAppDataId != null) {
-      appDataId = cachedAppDataId;
-    } else {
-      await saveCachedAppDataId();
+    if (patientCode.isNotEmpty) {
+      var cachedAppDataId = await readCachedAppDataId();
+      if (cachedAppDataId != null) {
+        appDataId = cachedAppDataId;
+      } else {
+        await saveCachedAppDataId();
+      }
+      print('🍯');
+      print(appDataId);
+      print(Store.user.currentSelectPatientInfo?.toJson());
+      print(patientCode);
+      print('🍯');
+      await readCachedRecord();
     }
   }
 
@@ -114,6 +122,9 @@ class MedicalController extends FControllerBase {
       fileName: 'appDataId',
       directory: "patient/$patientCode",
     );
+    print('🍔');
+    print(patientCode);
+    print('🍔');
     return cachedRecord.read();
   }
 
@@ -122,6 +133,9 @@ class MedicalController extends FControllerBase {
       fileName: 'JKJC',
       directory: "patient/$patientCode",
     );
+    print('🍔');
+    print(patientCode);
+    print('🍔');
     return cachedRecord.save(jsonEncode(diagnosisDataValue));
   }
 
@@ -162,7 +176,8 @@ class MedicalController extends FControllerBase {
         await _diagnosisManager.submitDiagnosisAsync(submitDiagnosisRequest);
     if (result) {
       PromptBox.toast('提交成功');
-      saveCachedAppDataId();
+      await saveCachedAppDataId();
+
       await deleteDirectory();
       await readCachedRecord();
       Future.delayed(const Duration(milliseconds: 10), () {

+ 57 - 11
lib/pages/medical/widgets/blood_pressure.dart

@@ -3,6 +3,7 @@ import 'dart:convert';
 import 'package:flutter/material.dart';
 import 'package:flutter/services.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/nibp.dart';
 import 'package:vnote_device_plugin/models/exams/nibp.dart';
@@ -185,7 +186,7 @@ class _ExamBloodPressureState extends State<BloodPressure> {
   late NibpDeviceController nibp;
   NibpDeviceWorker? worker;
   int liveValue = 0;
-
+  int errorCount = 0; //设备重连失败次数
   late NibpExamValue? value = NibpExamValue(
       diastolicPressure: controller.diagnosisDataValue['NIBP']?['Sbp'],
       // int.parse(controller.diagnosisDataValue['NIBP']?['Sbp'] ?? '0'),
@@ -243,7 +244,6 @@ class _ExamBloodPressureState extends State<BloodPressure> {
   void dispose() {
     disconnect();
     worker?.dispose();
-    print('${worker!.type}disposed. ');
     super.dispose();
   }
 
@@ -282,18 +282,30 @@ class _ExamBloodPressureState extends State<BloodPressure> {
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectStatus = WorkerStatus.connectionFailed;
-    setState(() {});
-  }
 
-  void _onConnectSuccess(sender, e) {
-    _connectStatus = WorkerStatus.connected;
-    setState(() {});
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      _connectStatus = WorkerStatus.connectionFailed;
+    });
   }
 
   void _onDisconnected(sender, e) {
     print('设备连接中断');
-    _connectStatus = WorkerStatus.disconnected;
+
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      _connectStatus = WorkerStatus.disconnected;
+    });
+  }
+
+  void _onConnectSuccess(sender, e) {
+    _connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
@@ -348,12 +360,46 @@ class _ExamBloodPressureState extends State<BloodPressure> {
             ),
           ),
         ),
-        // _buildLeftOrRightBloodPressure(),
-        DeviceStatus(connectStatus: _connectStatus),
+        if (errorCount < 3)
+          DeviceStatusPosition(
+            deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+          ),
+        if (errorCount >= 3) _buildErrorButton(),
       ],
     );
   }
 
+  /// 需要封装一下
+  Widget _buildErrorButton() {
+    return DeviceStatusPosition(
+      deviceStatus: Row(
+        children: [
+          const Text(
+            '请确认设备是否启动',
+            style: TextStyle(fontSize: 24, color: Colors.red),
+          ),
+          const SizedBox(
+            width: 8,
+          ),
+          IconButton(
+            onPressed: () {
+              worker?.connect();
+              setState(() {
+                _connectStatus = WorkerStatus.connecting;
+                errorCount = 0;
+              });
+            },
+            icon: const Icon(Icons.refresh),
+            iconSize: 32,
+          ),
+          const SizedBox(
+            width: 32,
+          ),
+        ],
+      ),
+    );
+  }
+
   Widget _buildLeftOrRightBloodPressure() {
     return Positioned(
       top: 130,

+ 57 - 11
lib/pages/medical/widgets/blood_sugar.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/sugar.dart';
 import 'package:vnote_device_plugin/models/exams/sugar.dart';
@@ -26,6 +27,7 @@ class _ExamBloodSugarState extends State<BloodSugar> {
   var controller = Get.find<MedicalController>();
   late SugarDeviceController sugar;
   SugarDeviceWorker? worker;
+  int errorCount = 0; //设备重连失败次数
   WorkerStatus _connectStatus = WorkerStatus.connecting;
 
   late String _value = controller.diagnosisDataValue['GLU']?['sugar'] ?? '';
@@ -86,7 +88,6 @@ class _ExamBloodSugarState extends State<BloodSugar> {
   @override
   void dispose() {
     disconnect();
-    print('${worker!.type}disposed. ');
     worker?.dispose();
     super.dispose();
   }
@@ -102,20 +103,30 @@ class _ExamBloodSugarState extends State<BloodSugar> {
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectStatus = WorkerStatus.connectionFailed;
-    worker!.connect();
-    setState(() {});
-  }
 
-  void _onConnectSuccess(sender, e) {
-    _connectStatus = WorkerStatus.connected;
-    setState(() {});
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      _connectStatus = WorkerStatus.connectionFailed;
+    });
   }
 
   void _onDisconnected(sender, e) {
     print('设备连接中断');
-    _connectStatus = WorkerStatus.disconnected;
-    worker!.connect();
+
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      _connectStatus = WorkerStatus.disconnected;
+    });
+  }
+
+  void _onConnectSuccess(sender, e) {
+    _connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
@@ -124,11 +135,46 @@ class _ExamBloodSugarState extends State<BloodSugar> {
     return Stack(
       children: [
         _buildSugar(),
-        DeviceStatus(connectStatus: _connectStatus),
+        if (errorCount < 3)
+          DeviceStatusPosition(
+            deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+          ),
+        if (errorCount >= 3) _buildErrorButton(),
       ],
     );
   }
 
+  /// 需要封装一下
+  Widget _buildErrorButton() {
+    return DeviceStatusPosition(
+      deviceStatus: Row(
+        children: [
+          const Text(
+            '请确认设备是否启动',
+            style: TextStyle(fontSize: 24, color: Colors.red),
+          ),
+          const SizedBox(
+            width: 8,
+          ),
+          IconButton(
+            onPressed: () {
+              worker?.connect();
+              setState(() {
+                _connectStatus = WorkerStatus.connecting;
+                errorCount = 0;
+              });
+            },
+            icon: const Icon(Icons.refresh),
+            iconSize: 32,
+          ),
+          const SizedBox(
+            width: 32,
+          ),
+        ],
+      ),
+    );
+  }
+
   Widget _buildSugar() {
     return ExamCard(
       title: '血糖',

+ 56 - 8
lib/pages/medical/widgets/body_bmi.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/weight.dart';
 import 'package:vitalapp/managers/interfaces/models/device.dart';
@@ -25,6 +26,7 @@ class _ExamBodyWeightState extends State<BodyWeight> {
   var controller = Get.find<MedicalController>();
   late BmiDeviceController bmi;
   WeightDeviceWorker? worker;
+  int errorCount = 0; //设备重连失败次数
 
   WorkerStatus _connectStatus = WorkerStatus.connecting;
 
@@ -118,18 +120,30 @@ class _ExamBodyWeightState extends State<BodyWeight> {
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectStatus = WorkerStatus.connectionFailed;
-    setState(() {});
-  }
 
-  void _onConnectSuccess(sender, e) {
-    _connectStatus = WorkerStatus.connected;
-    setState(() {});
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      _connectStatus = WorkerStatus.connectionFailed;
+    });
   }
 
   void _onDisconnected(sender, e) {
     print('设备连接中断');
-    _connectStatus = WorkerStatus.disconnected;
+
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      _connectStatus = WorkerStatus.disconnected;
+    });
+  }
+
+  void _onConnectSuccess(sender, e) {
+    _connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
@@ -157,7 +171,11 @@ class _ExamBodyWeightState extends State<BodyWeight> {
                   unit: 'kg',
                   onTap: _inputWeight,
                 ),
-                DeviceStatus(connectStatus: _connectStatus),
+                if (errorCount < 3)
+                  DeviceStatusPosition(
+                    deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+                  ),
+                if (errorCount >= 3) _buildErrorButton(),
               ],
             ),
             const Divider(indent: 30),
@@ -170,6 +188,36 @@ class _ExamBodyWeightState extends State<BodyWeight> {
         ));
   }
 
+  Widget _buildErrorButton() {
+    return DeviceStatusPosition(
+      deviceStatus: Row(
+        children: [
+          const Text(
+            '请确认设备是否启动',
+            style: TextStyle(fontSize: 24, color: Colors.red),
+          ),
+          const SizedBox(
+            width: 8,
+          ),
+          IconButton(
+            onPressed: () {
+              worker?.connect();
+              setState(() {
+                _connectStatus = WorkerStatus.connecting;
+                errorCount = 0;
+              });
+            },
+            icon: const Icon(Icons.refresh),
+            iconSize: 32,
+          ),
+          const SizedBox(
+            width: 32,
+          ),
+        ],
+      ),
+    );
+  }
+
   Future<void> _inputWeight() async {
     String? result = await VDialogNumber(
       title: '体重',

+ 38 - 29
lib/pages/medical/widgets/body_temperature.dart

@@ -1,5 +1,6 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/temp.dart';
 import 'package:vitalapp/components/dialog_number.dart';
@@ -91,7 +92,6 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
   void dispose() {
     disconnect();
     worker?.dispose();
-    print('${worker!.type}disposed. ');
     super.dispose();
   }
 
@@ -130,9 +130,13 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
 
   void _onDisconnected(sender, e) {
     print('设备连接中断');
-    connectStatus = WorkerStatus.disconnected;
-    worker!.connect();
-    setState(() {});
+    if (errorCount < 3) {
+      worker?.connect();
+    }
+    setState(() {
+      errorCount++;
+      connectStatus = WorkerStatus.disconnected;
+    });
   }
 
   @override
@@ -140,37 +144,42 @@ class _ExamBodyTemperatureState extends State<BodyTemperature> {
     return Stack(
       children: [
         _buildTemperature(),
-        if (errorCount < 3) DeviceStatus(connectStatus: connectStatus),
+        if (errorCount < 3)
+          DeviceStatusPosition(
+            deviceStatus: DeviceStatus(connectStatus: connectStatus),
+          ),
         if (errorCount >= 3) _buildErrorButton(),
       ],
     );
   }
 
   Widget _buildErrorButton() {
-    return Row(
-      children: [
-        const Text(
-          '请确认设备是否启动',
-          style: TextStyle(fontSize: 24, color: Colors.red),
-        ),
-        const SizedBox(
-          width: 8,
-        ),
-        IconButton(
-          onPressed: () {
-            worker?.connect();
-            setState(() {
-              connectStatus = WorkerStatus.connecting;
-              errorCount = 0;
-            });
-          },
-          icon: const Icon(Icons.refresh),
-          iconSize: 32,
-        ),
-        const SizedBox(
-          width: 32,
-        ),
-      ],
+    return DeviceStatusPosition(
+      deviceStatus: Row(
+        children: [
+          const Text(
+            '请确认设备是否启动',
+            style: TextStyle(fontSize: 24, color: Colors.red),
+          ),
+          const SizedBox(
+            width: 8,
+          ),
+          IconButton(
+            onPressed: () {
+              worker?.connect();
+              setState(() {
+                connectStatus = WorkerStatus.connecting;
+                errorCount = 0;
+              });
+            },
+            icon: const Icon(Icons.refresh),
+            iconSize: 32,
+          ),
+          const SizedBox(
+            width: 32,
+          ),
+        ],
+      ),
     );
   }
 

+ 39 - 2
lib/pages/medical/widgets/bool_oxygen.dart

@@ -1,6 +1,7 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
 import 'package:vitalapp/components/dialog_number.dart';
+import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/sp_o2.dart';
 import 'package:vnote_device_plugin/models/exams/sp_o2.dart';
@@ -24,6 +25,8 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
   SpO2DeviceWorker? worker;
   String pulse = '';
   String spO2 = '';
+  int errorCount = 0; //设备重连失败次数
+
   WorkerStatus _connectStatus = WorkerStatus.connecting;
 
   @override
@@ -36,7 +39,6 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
   void dispose() {
     disconnect();
     worker?.dispose();
-    print('${worker!.type}disposed. ');
     super.dispose();
   }
 
@@ -70,6 +72,7 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
     worker!.valueUpdateEvent.addListener(_onSuccess);
     worker!.connectErrorEvent.addListener(_onConnectFail);
     worker!.connectedEvent.addListener(_onConnectSuccess);
+    worker!.disconnectedEvent.addListener(_onDisconnected);
     worker!.connect();
   }
 
@@ -150,6 +153,36 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
     setState(() {});
   }
 
+  Widget _buildErrorButton() {
+    return DeviceStatusPosition(
+      deviceStatus: Row(
+        children: [
+          const Text(
+            '请确认设备是否启动',
+            style: TextStyle(fontSize: 24, color: Colors.red),
+          ),
+          const SizedBox(
+            width: 8,
+          ),
+          IconButton(
+            onPressed: () {
+              worker?.connect();
+              setState(() {
+                _connectStatus = WorkerStatus.connecting;
+                errorCount = 0;
+              });
+            },
+            icon: const Icon(Icons.refresh),
+            iconSize: 32,
+          ),
+          const SizedBox(
+            width: 32,
+          ),
+        ],
+      ),
+    );
+  }
+
   @override
   Widget build(BuildContext context) {
     return Stack(
@@ -178,7 +211,11 @@ class _ExamBloodOxygenState extends State<BloodOxygen> {
             ],
           ),
         ),
-        DeviceStatus(connectStatus: _connectStatus),
+        if (errorCount < 3)
+          DeviceStatusPosition(
+            deviceStatus: DeviceStatus(connectStatus: _connectStatus),
+          ),
+        if (errorCount >= 3) _buildErrorButton(),
       ],
     );
   }

+ 18 - 0
lib/pages/medical/widgets/device_status_position.dart

@@ -0,0 +1,18 @@
+import 'package:flutter/material.dart';
+
+class DeviceStatusPosition extends StatelessWidget {
+  const DeviceStatusPosition({
+    super.key,
+    required this.deviceStatus,
+  });
+  final Widget deviceStatus;
+
+  @override
+  Widget build(BuildContext context) {
+    return Positioned(
+      right: 10,
+      top: 10,
+      child: deviceStatus,
+    );
+  }
+}

+ 4 - 1
lib/pages/medical/widgets/urinalysis.dart

@@ -3,6 +3,7 @@ import 'package:get/get.dart';
 import 'package:vitalapp/components/dialog_input.dart';
 import 'package:vitalapp/pages/mappers/urine.dart';
 import 'package:vitalapp/pages/medical/controllers/urinalysis.dart';
+import 'package:vitalapp/pages/medical/widgets/device_status_position.dart';
 import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vitalapp/managers/interfaces/models/device.dart';
 import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
@@ -147,7 +148,9 @@ class _ExamUrinalysisState extends State<Urinalysis> {
     return Stack(
       children: [
         _buildTemperature(),
-        DeviceStatus(connectStatus: connectStatus),
+        DeviceStatusPosition(
+          deviceStatus: DeviceStatus(connectStatus: connectStatus),
+        ),
       ],
     );
   }