Browse Source

1、更新体检部分组件,获取到本地数据

guanxinyi 1 year ago
parent
commit
fb1927a1c1

BIN
assets/images/healthCheck/nibp.png


BIN
assets/images/healthCheck/spo2.png


BIN
assets/images/healthCheck/sugar.png


+ 35 - 53
lib/pages/check/widgets/exam_configurable/exam_blood_sugar.dart

@@ -1,16 +1,17 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.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';
+import 'package:vnoteapp/managers/interfaces/models/device.dart';
 import 'package:vnoteapp/managers/interfaces/permission.dart';
 import 'package:vnoteapp/pages/check/models/form.dart';
+import 'package:vnoteapp/pages/check/widgets/device_controller.dart';
 import 'package:vnoteapp/pages/check/widgets/exam_configurable/exam_card.dart';
 
 import 'package:vnoteapp/components/dialog_number.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_disconnected.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_fail.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_success.dart';
+import 'package:vnoteapp/pages/medical/models/worker.dart';
+import 'package:vnoteapp/pages/medical/widgets/device_status.dart';
 
 // ignore: must_be_immutable
 class ExamBloodSugar extends StatefulWidget {
@@ -30,39 +31,31 @@ class ExamBloodSugar extends StatefulWidget {
 
 class _ExamBloodSugarState extends State<ExamBloodSugar> {
   var permissionManager = Get.find<IPermissionManager>();
-  late final SugarDeviceWorker worker = SugarDeviceWorker(
-    mac: '60:98:66:C4:0E:51',
-    model: 'i-sens630',
-  );
+  final controller = Get.find<DeviceController>();
+  WorkerStatus connectStatus = WorkerStatus.connecting;
+  late SugarDeviceWorker worker;
 
-  /// 设备连接失败的状态
-  bool _connectFailStatus = false;
-
-  /// 设备连接中断的状态
-  bool _connectDisconnectedStatus = false;
-
-  /// 设备连接成功的状态
-  bool _connectSuccessStatus = false;
-
-  /// 设备是否连接中
-  bool _isConnect = false;
   @override
   void initState() {
     getPermission();
-    worker.successEvent.addListener(_onSuccess);
-    worker.connectErrorEvent.addListener(_onConnectFail);
-    worker.connectedEvent.addListener(_onConnectSuccess);
-    worker.disconnectedEvent.addListener(_onDisconnected);
-
-    connect();
+    currentDevice();
     super.initState();
   }
 
+  Future<void> currentDevice() async {
+    DeviceModel? device = await controller.getDevice(DeviceTypes.SUGAR);
+    if (device.isNull) {
+      connectStatus = WorkerStatus.unboundDevice;
+      setState(() {});
+      return;
+    }
+    worker =
+        SugarDeviceWorker(mac: device?.mac ?? '', model: device?.model ?? '');
+
+    loadListeners();
+  }
+
   Future<void> connect() async {
-    _connectFailStatus = false;
-    _isConnect = true;
-    _connectSuccessStatus = false;
-    _connectDisconnectedStatus = false;
     setState(() {});
     await worker.connect();
   }
@@ -85,37 +78,35 @@ class _ExamBloodSugarState extends State<ExamBloodSugar> {
     setState(() {
       widget.currentInputValue = e.sugar.toString();
       widget.bloodSugarInput!.call(widget.currentInputValue);
-
-      _isConnect = false;
+      connectStatus = WorkerStatus.connected;
     });
   }
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectFailStatus = true;
-    _connectSuccessStatus = false;
-    _connectDisconnectedStatus = false;
-    _isConnect = false;
+    connectStatus = WorkerStatus.connectionFailed;
     setState(() {});
   }
 
   void _onConnectSuccess(sender, e) {
-    _connectSuccessStatus = true;
-    _isConnect = false;
-    _connectFailStatus = false;
-    _connectDisconnectedStatus = false;
+    connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
   void _onDisconnected(sender, e) {
+    connectStatus = WorkerStatus.disconnected;
     print('设备连接中断');
-    _connectDisconnectedStatus = true;
-    _connectSuccessStatus = false;
-    _connectFailStatus = false;
-    _isConnect = false;
     setState(() {});
   }
 
+  void loadListeners() {
+    worker.successEvent.addListener(_onSuccess);
+    worker.connectErrorEvent.addListener(_onConnectFail);
+    worker.connectedEvent.addListener(_onConnectSuccess);
+    worker.disconnectedEvent.addListener(_onDisconnected);
+    worker.connect();
+  }
+
   Future<void> getPermission() async {
     await permissionManager.requestLocationPermission();
     await permissionManager.requestBluetoothConnectPermission();
@@ -128,16 +119,7 @@ class _ExamBloodSugarState extends State<ExamBloodSugar> {
     return Stack(
       children: [
         _buildTemperature(),
-        if (_connectFailStatus)
-          DeviceConnectFail(
-            connect: () => connect(),
-          ),
-        if (_connectSuccessStatus) const DeviceConnectSuccess(),
-        if (_isConnect) const DeviceConnect(),
-        if (_connectDisconnectedStatus)
-          DeviceConnectDisconnected(
-            connect: () => connect(),
-          ),
+        DeviceStatus(connectStatus: connectStatus),
       ],
     );
   }

+ 47 - 59
lib/pages/check/widgets/exam_configurable/exam_body_temperature.dart

@@ -1,14 +1,15 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/temp.dart';
 import 'package:vnoteapp/components/dialog_number.dart';
+import 'package:vnoteapp/managers/interfaces/models/device.dart';
 import 'package:vnoteapp/managers/interfaces/permission.dart';
 import 'package:vnoteapp/pages/check/models/form.dart';
+import 'package:vnoteapp/pages/check/widgets/device_controller.dart';
 import 'package:vnoteapp/pages/check/widgets/exam_configurable/exam_card.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_disconnected.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_fail.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_success.dart';
+import 'package:vnoteapp/pages/medical/models/worker.dart';
+import 'package:vnoteapp/pages/medical/widgets/device_status.dart';
 
 // ignore: must_be_immutable
 class ExamBodyTemperature extends StatefulWidget {
@@ -26,50 +27,53 @@ class ExamBodyTemperature extends StatefulWidget {
   State<ExamBodyTemperature> createState() => _ExamBodyTemperatureState();
 }
 
+/// TODO 先完成配置设备的替换 还需要优化
 class _ExamBodyTemperatureState extends State<ExamBodyTemperature> {
   var permissionManager = Get.find<IPermissionManager>();
-  late final TempDeviceWorker worker = TempDeviceWorker(
-    mac: 'D0:05:00:00:00:67',
-    model: 'YHW-6',
-  );
-
-  /// 设备连接失败的状态
-  bool _connectFailStatus = false;
-
-  /// 设备连接中断的状态
-  bool _connectDisconnectedStatus = false;
-
-  /// 设备连接成功的状态
-  bool _connectSuccessStatus = false;
+  final controller = Get.find<DeviceController>();
+  WorkerStatus connectStatus = WorkerStatus.connecting;
+  late TempDeviceWorker worker;
+
+  Future<void> currentDevice() async {
+    DeviceModel? device = await controller.getDevice(DeviceTypes.TEMP);
+    if (device.isNull) {
+      connectStatus = WorkerStatus.unboundDevice;
+      return;
+    }
+    worker =
+        TempDeviceWorker(model: device?.model ?? '', mac: device?.mac ?? '');
+    loadListeners();
+  }
 
-  /// 设备是否连接中
-  bool _isConnect = false;
   @override
   void initState() {
-    getPermission();
-    worker.successEvent.addListener(_onSuccess);
-    worker.connectErrorEvent.addListener(_onConnectFail);
-    worker.connectedEvent.addListener(_onConnectSuccess);
-    worker.disconnectedEvent.addListener(_onDisconnected);
+    currentDevice();
 
-    connect();
     super.initState();
   }
 
   Future<void> connect() async {
-    _connectFailStatus = false;
-    _isConnect = true;
-    _connectSuccessStatus = false;
-    _connectDisconnectedStatus = false;
     setState(() {});
     await worker.connect();
   }
 
+  void loadListeners() {
+    worker.successEvent.addListener(_onSuccess);
+    worker.connectErrorEvent.addListener(_onConnectFail);
+    worker.connectedEvent.addListener(_onConnectSuccess);
+    worker.disconnectedEvent.addListener(_onDisconnected);
+    worker.tempTooLowEvent.addListener(_onTempTooLowOrTooHeigh);
+    worker.tempTooHighEvent.addListener(_onTempTooLowOrTooHeigh);
+    worker.connect();
+  }
+
   Future<void> disconnect() async {
     worker.connectErrorEvent.removeListener(_onConnectFail);
     worker.connectedEvent.removeListener(_onConnectSuccess);
     worker.successEvent.removeListener(_onSuccess);
     worker.disconnectedEvent.removeListener(_onDisconnected);
+    worker.tempTooLowEvent.removeListener(_onTempTooLowOrTooHeigh);
+    worker.tempTooHighEvent.removeListener(_onTempTooLowOrTooHeigh);
     await worker.disconnect();
   }
 
@@ -83,41 +87,34 @@ class _ExamBodyTemperatureState extends State<ExamBodyTemperature> {
     setState(() {
       widget.currentInputValue = e.toString();
       widget.bodyTemperatureInput!.call(widget.currentInputValue);
-      _isConnect = false;
+      connectStatus = WorkerStatus.connected;
     });
   }
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectFailStatus = true;
-    _connectSuccessStatus = false;
-    _connectDisconnectedStatus = false;
-    _isConnect = false;
+    connectStatus = WorkerStatus.connectionFailed;
+    worker.connect();
     setState(() {});
   }
 
   void _onConnectSuccess(sender, e) {
-    _connectSuccessStatus = true;
-    _isConnect = false;
-    _connectFailStatus = false;
-    _connectDisconnectedStatus = false;
+    connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
-  void _onDisconnected(sender, e) {
-    print('设备连接中断');
-    _connectDisconnectedStatus = true;
-    _connectSuccessStatus = false;
-    _connectFailStatus = false;
-    _isConnect = false;
+  void _onTempTooLowOrTooHeigh(sender, e) {
+    widget.currentInputValue = e.toString();
+    widget.bodyTemperatureInput!.call(widget.currentInputValue);
+    connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
-  Future<void> getPermission() async {
-    await permissionManager.requestLocationPermission();
-    await permissionManager.requestBluetoothConnectPermission();
-    await permissionManager.requestBluetoothAdvertisePermission();
-    await permissionManager.requestBluetoothScanPermission();
+  void _onDisconnected(sender, e) {
+    connectStatus = WorkerStatus.disconnected;
+    worker.connect();
+    print('设备连接中断');
+    setState(() {});
   }
 
   @override
@@ -125,16 +122,7 @@ class _ExamBodyTemperatureState extends State<ExamBodyTemperature> {
     return Stack(
       children: [
         _buildTemperature(),
-        if (_connectFailStatus)
-          DeviceConnectFail(
-            connect: () => connect(),
-          ),
-        if (_connectSuccessStatus) const DeviceConnectSuccess(),
-        if (_isConnect) const DeviceConnect(),
-        if (_connectDisconnectedStatus)
-          DeviceConnectDisconnected(
-            connect: () => connect(),
-          ),
+        DeviceStatus(connectStatus: connectStatus),
       ],
     );
   }

+ 34 - 47
lib/pages/check/widgets/exam_configurable/exam_body_weight.dart

@@ -1,15 +1,16 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
+import 'package:vnote_device_plugin/consts/types.dart';
 import 'package:vnote_device_plugin/devices/weight.dart';
+import 'package:vnoteapp/managers/interfaces/models/device.dart';
 import 'package:vnoteapp/managers/interfaces/permission.dart';
 import 'package:vnoteapp/pages/check/models/form.dart';
+import 'package:vnoteapp/pages/check/widgets/device_controller.dart';
 import 'package:vnoteapp/pages/check/widgets/exam_configurable/exam_card.dart';
 
 import 'package:vnoteapp/components/dialog_number.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_disconnected.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_fail.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_success.dart';
+import 'package:vnoteapp/pages/medical/models/worker.dart';
+import 'package:vnoteapp/pages/medical/widgets/device_status.dart';
 
 // ignore: must_be_immutable
 class ExamBodyWeight extends StatefulWidget {
@@ -29,39 +30,43 @@ class ExamBodyWeight extends StatefulWidget {
 
 class _ExamBodyWeightState extends State<ExamBodyWeight> {
   var permissionManager = Get.find<IPermissionManager>();
-  late final WeightDeviceWorker worker = WeightDeviceWorker(
-    mac: 'CF:E4:2C:22:01:39',
-    model: 'CF398BLE',
-  );
+  final controller = Get.find<DeviceController>();
 
-  /// 设备连接失败的状态
-  bool _connectFailStatus = false;
+  late WeightDeviceWorker worker;
 
-  /// 设备连接中断的状态
-  bool _connectDisconnectedStatus = false;
+  late WorkerStatus connectStatus = WorkerStatus.connecting;
 
-  /// 设备连接成功的状态
-  bool _connectSuccessStatus = false;
-
-  /// 设备是否连接中
-  bool _isConnect = false;
   @override
   void initState() {
     getPermission();
+    currentDevice();
+    super.initState();
+  }
+
+  Future<void> currentDevice() async {
+    DeviceModel? device = await controller.getDevice(DeviceTypes.WEIGHT);
+    if (device.isNull) {
+      connectStatus = WorkerStatus.unboundDevice;
+      setState(() {});
+      return;
+    }
+    worker = WeightDeviceWorker(
+      mac: device?.mac ?? '',
+      model: device?.model ?? '',
+    );
+
+    loadListeners();
+  }
+
+  void loadListeners() {
     worker.successEvent.addListener(_onSuccess);
     worker.connectErrorEvent.addListener(_onConnectFail);
     worker.connectedEvent.addListener(_onConnectSuccess);
     worker.disconnectedEvent.addListener(_onDisconnected);
-
-    connect();
-    super.initState();
+    worker.connect();
   }
 
   Future<void> connect() async {
-    _connectFailStatus = false;
-    _isConnect = true;
-    _connectSuccessStatus = false;
-    _connectDisconnectedStatus = false;
     setState(() {});
     await worker.connect();
   }
@@ -84,33 +89,24 @@ class _ExamBodyWeightState extends State<ExamBodyWeight> {
     setState(() {
       widget.currentInputValue = e.toString();
       widget.bodyWeightInput!.call(widget.currentInputValue);
-      _isConnect = false;
+      connectStatus = WorkerStatus.connected;
     });
   }
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectFailStatus = true;
-    _connectSuccessStatus = false;
-    _connectDisconnectedStatus = false;
-    _isConnect = false;
+    connectStatus = WorkerStatus.connectionFailed;
     setState(() {});
   }
 
   void _onConnectSuccess(sender, e) {
-    _connectSuccessStatus = true;
-    _isConnect = false;
-    _connectFailStatus = false;
-    _connectDisconnectedStatus = false;
+    connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
   void _onDisconnected(sender, e) {
     print('设备连接中断');
-    _connectDisconnectedStatus = true;
-    _connectSuccessStatus = false;
-    _connectFailStatus = false;
-    _isConnect = false;
+    connectStatus = WorkerStatus.disconnected;
     setState(() {});
   }
 
@@ -126,16 +122,7 @@ class _ExamBodyWeightState extends State<ExamBodyWeight> {
     return Stack(
       children: [
         _buildTemperature(),
-        if (_connectFailStatus)
-          DeviceConnectFail(
-            connect: () => connect(),
-          ),
-        if (_connectSuccessStatus) const DeviceConnectSuccess(),
-        if (_isConnect) const DeviceConnect(),
-        if (_connectDisconnectedStatus)
-          DeviceConnectDisconnected(
-            connect: () => connect(),
-          ),
+        DeviceStatus(connectStatus: connectStatus),
       ],
     );
   }

+ 36 - 44
lib/pages/check/widgets/exam_configurable/exam_boold_oxygen.dart

@@ -1,13 +1,14 @@
 import 'package:flutter/material.dart';
 import 'package:get/get.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';
+import 'package:vnoteapp/managers/interfaces/models/device.dart';
 import 'package:vnoteapp/managers/interfaces/permission.dart';
+import 'package:vnoteapp/pages/check/widgets/device_controller.dart';
 import 'package:vnoteapp/pages/check/widgets/exam_configurable/exam_card.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_disconnected.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_fail.dart';
-import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_success.dart';
+import 'package:vnoteapp/pages/medical/models/worker.dart';
+import 'package:vnoteapp/pages/medical/widgets/device_status.dart';
 
 // ignore: must_be_immutable
 class ExamBloodOxygen extends StatefulWidget {
@@ -24,39 +25,48 @@ class ExamBloodOxygen extends StatefulWidget {
 
 class _ExamBloodOxygenState extends State<ExamBloodOxygen> {
   var permissionManager = Get.find<IPermissionManager>();
+  final controller = Get.find<DeviceController>();
 
-  late final SpO2DeviceWorker worker = SpO2DeviceWorker(
-    mac: 'A4:C1:38:0B:CC:60',
-    model: 'AOJ-70B',
-  );
+  late SpO2DeviceWorker worker;
+
+  late WorkerStatus connectStatus = WorkerStatus.connecting;
   late String pulse = widget.currentValue['Pulse_Frequency'] ?? '0';
   late String spO2 = widget.currentValue['Spo2'] ?? '0';
-  bool _connectFailStatus = false;
-  bool _connectSuccessStatus = false;
-  bool _isConnect = false;
 
-  /// 设备连接中断的状态
-  bool _connectDisconnectedStatus = false;
   @override
   void initState() {
     getPermission();
-    worker.valueUpdateEvent.addListener(_onSuccess);
-    worker.connectErrorEvent.addListener(_onConnectFail);
-    worker.connectedEvent.addListener(_onConnectSuccess);
+    currentDevice();
+    super.initState();
+  }
 
-    connect();
+  Future<void> currentDevice() async {
+    DeviceModel? device = await controller.getDevice(DeviceTypes.SPO2);
+    if (device.isNull) {
+      connectStatus = WorkerStatus.unboundDevice;
+      setState(() {});
+      return;
+    }
+    worker = SpO2DeviceWorker(
+      mac: device?.mac ?? '',
+      model: device?.model ?? '',
+    );
 
-    super.initState();
+    loadListeners();
   }
 
   Future<void> connect() async {
-    _connectFailStatus = false;
-    _isConnect = true;
-    _connectSuccessStatus = false;
     setState(() {});
     await worker.connect();
   }
 
+  void loadListeners() {
+    worker.valueUpdateEvent.addListener(_onSuccess);
+    worker.connectErrorEvent.addListener(_onConnectFail);
+    worker.connectedEvent.addListener(_onConnectSuccess);
+    worker.connect();
+  }
+
   Future<void> disconnect() async {
     worker.connectErrorEvent.removeListener(_onConnectFail);
     worker.connectedEvent.removeListener(_onConnectSuccess);
@@ -85,34 +95,25 @@ class _ExamBloodOxygenState extends State<ExamBloodOxygen> {
         'Spo2': spO2,
         'Pulse_Frequency': pulse,
       };
-      _isConnect = false;
+      connectStatus = WorkerStatus.connected;
       // disconnect();
     });
   }
 
   void _onConnectFail(sender, e) {
     print('连接设备失败');
-    _connectFailStatus = true;
-    _connectSuccessStatus = false;
-    _isConnect = false;
-    _connectDisconnectedStatus = false;
+    connectStatus = WorkerStatus.connectionFailed;
     setState(() {});
   }
 
   void _onConnectSuccess(sender, e) {
-    _connectSuccessStatus = true;
-    _connectFailStatus = false;
-    _isConnect = false;
-    _connectDisconnectedStatus = false;
+    connectStatus = WorkerStatus.connected;
     setState(() {});
   }
 
   void _onDisconnected(sender, e) {
     print('设备连接中断');
-    _connectDisconnectedStatus = true;
-    _connectSuccessStatus = false;
-    _connectFailStatus = false;
-    _isConnect = false;
+    connectStatus = WorkerStatus.disconnected;
     setState(() {});
   }
 
@@ -151,16 +152,7 @@ class _ExamBloodOxygenState extends State<ExamBloodOxygen> {
             ),
           ],
         )),
-        if (_connectFailStatus)
-          DeviceConnectFail(
-            connect: () => connect(),
-          ),
-        if (_connectSuccessStatus) const DeviceConnectSuccess(),
-        if (_isConnect) const DeviceConnect(),
-        if (_connectDisconnectedStatus)
-          DeviceConnectDisconnected(
-            connect: () => connect(),
-          ),
+        DeviceStatus(connectStatus: connectStatus),
       ],
     );
   }

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

@@ -64,8 +64,6 @@ class MedicalController extends FControllerBase {
 
   Future<bool?> saveCachedAppDataId() async {
     appDataId = const Uuid().v4().replaceAll('-', '');
-    print(appDataId);
-    print('🌰');
     TextStorage cachedRecord = TextStorage(
       fileName: 'appDataId',
       directory: "patient/$patientCode",
@@ -90,7 +88,6 @@ class MedicalController extends FControllerBase {
         diagnosisDataValue[state.currentTab],
       ),
     );
-    print(diagnosisDataValue['BMI']);
   }
 
   Future<void> createDiagnosis() async {

+ 1 - 0
pubspec.yaml

@@ -109,6 +109,7 @@ flutter:
     - assets/images/exam/
     - assets/images/device/icon/
     - assets/images/home/
+    - assets/images/healthCheck/
   #   - images/a_dot_burr.jpeg
   #   - images/a_dot_ham.jpeg