|
@@ -1,8 +1,7 @@
|
|
|
+import 'dart:convert';
|
|
|
+
|
|
|
import 'package:flutter/material.dart';
|
|
|
import 'package:get/get.dart';
|
|
|
-import 'package:vnote_device_plugin/devices/sugar.dart';
|
|
|
-import 'package:vnote_device_plugin/models/exams/sugar.dart';
|
|
|
-import 'package:vnoteapp/managers/interfaces/permission.dart';
|
|
|
import 'package:vnoteapp/pages/check/widgets/exam_configurable/exam_card.dart';
|
|
|
|
|
|
import 'package:vnoteapp/components/dialog_number.dart';
|
|
@@ -10,130 +9,24 @@ import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect.
|
|
|
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/controller.dart';
|
|
|
+import 'package:vnoteapp/pages/medical/models/worker.dart';
|
|
|
|
|
|
-
|
|
|
-class BloodSugar extends StatefulWidget {
|
|
|
- const BloodSugar({
|
|
|
- super.key,
|
|
|
- });
|
|
|
-
|
|
|
- @override
|
|
|
- State<BloodSugar> createState() => _ExamBloodSugarState();
|
|
|
-}
|
|
|
-
|
|
|
-class _ExamBloodSugarState extends State<BloodSugar> {
|
|
|
- var permissionManager = Get.find<IPermissionManager>();
|
|
|
- late final SugarDeviceWorker worker = SugarDeviceWorker(
|
|
|
- mac: '60:98:66:C4:0E:51',
|
|
|
- model: 'i-sens630',
|
|
|
- );
|
|
|
-
|
|
|
-
|
|
|
- bool _connectFailStatus = false;
|
|
|
-
|
|
|
-
|
|
|
- bool _connectDisconnectedStatus = false;
|
|
|
-
|
|
|
-
|
|
|
- bool _connectSuccessStatus = false;
|
|
|
-
|
|
|
-
|
|
|
- bool _isConnect = false;
|
|
|
-
|
|
|
- String _value = '';
|
|
|
- @override
|
|
|
- void initState() {
|
|
|
- getPermission();
|
|
|
- worker.successEvent.addListener(_onSuccess);
|
|
|
- worker.connectErrorEvent.addListener(_onConnectFail);
|
|
|
- worker.connectedEvent.addListener(_onConnectSuccess);
|
|
|
- worker.disconnectedEvent.addListener(_onDisconnected);
|
|
|
-
|
|
|
- connect();
|
|
|
- super.initState();
|
|
|
- }
|
|
|
-
|
|
|
- Future<void> connect() async {
|
|
|
- _connectFailStatus = false;
|
|
|
- _isConnect = true;
|
|
|
- _connectSuccessStatus = false;
|
|
|
- _connectDisconnectedStatus = false;
|
|
|
- setState(() {});
|
|
|
- await worker.connect();
|
|
|
- }
|
|
|
-
|
|
|
- Future<void> disconnect() async {
|
|
|
- worker.connectErrorEvent.removeListener(_onConnectFail);
|
|
|
- worker.connectedEvent.removeListener(_onConnectSuccess);
|
|
|
- worker.successEvent.removeListener(_onSuccess);
|
|
|
- worker.disconnectedEvent.removeListener(_onDisconnected);
|
|
|
- await worker.disconnect();
|
|
|
- }
|
|
|
-
|
|
|
- @override
|
|
|
- void dispose() {
|
|
|
- disconnect();
|
|
|
- super.dispose();
|
|
|
- }
|
|
|
-
|
|
|
- void _onSuccess(_, SugarExamData e) {
|
|
|
- setState(() {
|
|
|
- _value = e.sugar.toString();
|
|
|
-
|
|
|
- _isConnect = false;
|
|
|
- });
|
|
|
- }
|
|
|
-
|
|
|
- void _onConnectFail(sender, e) {
|
|
|
- print('连接设备失败');
|
|
|
- _connectFailStatus = true;
|
|
|
- _connectSuccessStatus = false;
|
|
|
- _connectDisconnectedStatus = false;
|
|
|
- _isConnect = false;
|
|
|
- setState(() {});
|
|
|
- }
|
|
|
-
|
|
|
- void _onConnectSuccess(sender, e) {
|
|
|
- _connectSuccessStatus = true;
|
|
|
- _isConnect = false;
|
|
|
- _connectFailStatus = false;
|
|
|
- _connectDisconnectedStatus = false;
|
|
|
- setState(() {});
|
|
|
- }
|
|
|
-
|
|
|
- void _onDisconnected(sender, e) {
|
|
|
- print('设备连接中断');
|
|
|
- _connectDisconnectedStatus = true;
|
|
|
- _connectSuccessStatus = false;
|
|
|
- _connectFailStatus = false;
|
|
|
- _isConnect = false;
|
|
|
- setState(() {});
|
|
|
- }
|
|
|
-
|
|
|
- Future<void> getPermission() async {
|
|
|
- await permissionManager.requestLocationPermission();
|
|
|
- await permissionManager.requestBluetoothConnectPermission();
|
|
|
- await permissionManager.requestBluetoothAdvertisePermission();
|
|
|
- await permissionManager.requestBluetoothScanPermission();
|
|
|
- }
|
|
|
+class BloodSugar extends GetView<MedicalController> {
|
|
|
+ const BloodSugar({super.key});
|
|
|
|
|
|
@override
|
|
|
Widget build(BuildContext context) {
|
|
|
- return Stack(
|
|
|
- children: [
|
|
|
- _buildTemperature(),
|
|
|
- if (_connectFailStatus)
|
|
|
- DeviceConnectFail(
|
|
|
- connect: () => connect(),
|
|
|
- ),
|
|
|
- if (_connectSuccessStatus) const DeviceConnectSuccess(),
|
|
|
- if (_isConnect) const DeviceConnect(),
|
|
|
- if (_connectDisconnectedStatus)
|
|
|
- DeviceConnectDisconnected(
|
|
|
- connect: () => connect(),
|
|
|
- ),
|
|
|
- ],
|
|
|
- );
|
|
|
+ return Obx(() {
|
|
|
+ var element = controller.state.medicalMenuList
|
|
|
+ .firstWhere((element) => element.key == 'GLU');
|
|
|
+ return Stack(
|
|
|
+ children: [
|
|
|
+ _buildTemperature(),
|
|
|
+ _buildStutas(element.diagnosisWorkerStatus),
|
|
|
+ ],
|
|
|
+ );
|
|
|
+ });
|
|
|
}
|
|
|
|
|
|
Widget _buildTemperature() {
|
|
@@ -155,21 +48,28 @@ class _ExamBloodSugarState extends State<BloodSugar> {
|
|
|
mainAxisAlignment: MainAxisAlignment.end,
|
|
|
crossAxisAlignment: CrossAxisAlignment.end,
|
|
|
children: [
|
|
|
- RichText(
|
|
|
- text: TextSpan(
|
|
|
- text: _value,
|
|
|
- style: const TextStyle(
|
|
|
- fontSize: 80,
|
|
|
- color: Colors.black,
|
|
|
+ Obx(() {
|
|
|
+ var element = controller.state.medicalMenuList
|
|
|
+ .firstWhere((element) => element.key == 'GLU');
|
|
|
+ String? value = element.diagnosisData;
|
|
|
+ String text =
|
|
|
+ value != null ? jsonDecode(value)['sugar'].toString() : '';
|
|
|
+ return RichText(
|
|
|
+ text: TextSpan(
|
|
|
+ text: text,
|
|
|
+ style: const TextStyle(
|
|
|
+ fontSize: 80,
|
|
|
+ color: Colors.black,
|
|
|
+ ),
|
|
|
+ children: const [
|
|
|
+ TextSpan(
|
|
|
+ text: 'mmol/L',
|
|
|
+ style: TextStyle(fontSize: 25),
|
|
|
+ )
|
|
|
+ ],
|
|
|
),
|
|
|
- children: const [
|
|
|
- TextSpan(
|
|
|
- text: 'mmol/L',
|
|
|
- style: TextStyle(fontSize: 25),
|
|
|
- )
|
|
|
- ],
|
|
|
- ),
|
|
|
- ),
|
|
|
+ );
|
|
|
+ })
|
|
|
],
|
|
|
),
|
|
|
),
|
|
@@ -180,10 +80,221 @@ class _ExamBloodSugarState extends State<BloodSugar> {
|
|
|
Future<void> _inputTemperature() async {
|
|
|
String? result = await VDialogNumber(
|
|
|
title: '血糖',
|
|
|
- initialValue: _value,
|
|
|
+ initialValue: jsonDecode(
|
|
|
+ controller.state.medicalMenuList.first.diagnosisData ?? '')['sugar'],
|
|
|
).show();
|
|
|
if (result?.isNotEmpty ?? false) {
|
|
|
- _value = result ?? '';
|
|
|
+ jsonDecode(controller.state.medicalMenuList.first.diagnosisData ?? '')[
|
|
|
+ 'sugar'] = result ?? '';
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ Widget _buildStutas(diagnosisWorkerStatus) {
|
|
|
+ switch (diagnosisWorkerStatus) {
|
|
|
+ case WorkerStatus.connectionFailed:
|
|
|
+ return const DeviceConnectFail();
|
|
|
+ case WorkerStatus.connected:
|
|
|
+ return const DeviceConnectSuccess();
|
|
|
+ case WorkerStatus.connecting:
|
|
|
+ return const DeviceConnect();
|
|
|
+ case WorkerStatus.disconnected:
|
|
|
+ return const DeviceConnectDisconnected();
|
|
|
+ default:
|
|
|
+ return const SizedBox();
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|