blood_sugar.dart 8.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300
  1. import 'dart:convert';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vnoteapp/pages/check/widgets/exam_configurable/exam_card.dart';
  5. import 'package:vnoteapp/components/dialog_number.dart';
  6. import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect.dart';
  7. import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_disconnected.dart';
  8. import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_fail.dart';
  9. import 'package:vnoteapp/pages/check/widgets/exam_device_connect_status/connect_success.dart';
  10. import 'package:vnoteapp/pages/medical/controller.dart';
  11. import 'package:vnoteapp/pages/medical/models/worker.dart';
  12. class BloodSugar extends GetView<MedicalController> {
  13. const BloodSugar({super.key});
  14. @override
  15. Widget build(BuildContext context) {
  16. return Obx(() {
  17. var element = controller.state.medicalMenuList
  18. .firstWhere((element) => element.key == 'GLU');
  19. return Stack(
  20. children: [
  21. _buildTemperature(),
  22. _buildStutas(element.diagnosisWorkerStatus),
  23. ],
  24. );
  25. });
  26. }
  27. Widget _buildTemperature() {
  28. return ExamCard(
  29. title: '血糖',
  30. clickCard: () {
  31. _inputTemperature();
  32. },
  33. content: Container(
  34. alignment: Alignment.bottomRight,
  35. padding: const EdgeInsets.only(
  36. bottom: 20,
  37. right: 30,
  38. left: 40,
  39. ),
  40. constraints: const BoxConstraints(minHeight: 150),
  41. child: FittedBox(
  42. child: Row(
  43. mainAxisAlignment: MainAxisAlignment.end,
  44. crossAxisAlignment: CrossAxisAlignment.end,
  45. children: [
  46. Obx(() {
  47. var element = controller.state.medicalMenuList
  48. .firstWhere((element) => element.key == 'GLU');
  49. String? value = element.diagnosisData;
  50. String text =
  51. value != null ? jsonDecode(value)['sugar'].toString() : '';
  52. return RichText(
  53. text: TextSpan(
  54. text: text,
  55. style: const TextStyle(
  56. fontSize: 80,
  57. color: Colors.black,
  58. ),
  59. children: const [
  60. TextSpan(
  61. text: 'mmol/L',
  62. style: TextStyle(fontSize: 25),
  63. )
  64. ],
  65. ),
  66. );
  67. })
  68. ],
  69. ),
  70. ),
  71. ),
  72. );
  73. }
  74. Future<void> _inputTemperature() async {
  75. String? result = await VDialogNumber(
  76. title: '血糖',
  77. initialValue: jsonDecode(
  78. controller.state.medicalMenuList.first.diagnosisData ?? '')['sugar'],
  79. ).show();
  80. if (result?.isNotEmpty ?? false) {
  81. jsonDecode(controller.state.medicalMenuList.first.diagnosisData ?? '')[
  82. 'sugar'] = result ?? '';
  83. }
  84. }
  85. Widget _buildStutas(diagnosisWorkerStatus) {
  86. switch (diagnosisWorkerStatus) {
  87. case WorkerStatus.connectionFailed:
  88. return const DeviceConnectFail();
  89. case WorkerStatus.connected:
  90. return const DeviceConnectSuccess();
  91. case WorkerStatus.connecting:
  92. return const DeviceConnect();
  93. case WorkerStatus.disconnected:
  94. return const DeviceConnectDisconnected();
  95. default:
  96. return const SizedBox();
  97. }
  98. }
  99. }
  100. // // ignore: must_be_immutable
  101. // class BloodSugar extends StatefulWidget {
  102. // const BloodSugar({
  103. // super.key,
  104. // });
  105. // @override
  106. // State<BloodSugar> createState() => _ExamBloodSugarState();
  107. // }
  108. // class _ExamBloodSugarState extends State<BloodSugar> {
  109. // var permissionManager = Get.find<IPermissionManager>();
  110. // var controller = Get.find<MedicalController>();
  111. // late final SugarDeviceWorker worker = SugarDeviceWorker(
  112. // mac: '60:98:66:C4:0E:51',
  113. // model: 'i-sens630',
  114. // );
  115. // /// 设备连接失败的状态
  116. // bool _connectFailStatus = false;
  117. // /// 设备连接中断的状态
  118. // bool _connectDisconnectedStatus = false;
  119. // /// 设备连接成功的状态
  120. // bool _connectSuccessStatus = false;
  121. // /// 设备是否连接中
  122. // bool _isConnect = false;
  123. // late String _value = controller.diagnosisDataValue['GLU']?['sugar'] ?? '';
  124. // @override
  125. // void initState() {
  126. // initSugar();
  127. // super.initState();
  128. // }
  129. // void workerAddListener() {
  130. // worker.successEvent.addListener(_onSuccess);
  131. // worker.connectErrorEvent.addListener(_onConnectFail);
  132. // worker.connectedEvent.addListener(_onConnectSuccess);
  133. // worker.disconnectedEvent.addListener(_onDisconnected);
  134. // }
  135. // Future<void> initSugar() async {
  136. // getPermission();
  137. // workerAddListener();
  138. // await connect();
  139. // await initData();
  140. // }
  141. // Future<void> initData() async {
  142. // await controller.readCachedRecord();
  143. // _value = controller.diagnosisDataValue['GLU']?['sugar'] ?? '';
  144. // setState(() {});
  145. // }
  146. // Future<void> connect() async {
  147. // _connectFailStatus = false;
  148. // _isConnect = true;
  149. // _connectSuccessStatus = false;
  150. // _connectDisconnectedStatus = false;
  151. // setState(() {});
  152. // await worker.connect();
  153. // }
  154. // Future<void> disconnect() async {
  155. // worker.connectErrorEvent.removeListener(_onConnectFail);
  156. // worker.connectedEvent.removeListener(_onConnectSuccess);
  157. // worker.successEvent.removeListener(_onSuccess);
  158. // worker.disconnectedEvent.removeListener(_onDisconnected);
  159. // await worker.disconnect();
  160. // }
  161. // @override
  162. // void dispose() {
  163. // disconnect();
  164. // super.dispose();
  165. // }
  166. // void _onSuccess(_, SugarExamData e) {
  167. // setState(() {
  168. // _value = e.sugar.toString();
  169. // controller.diagnosisDataValue['GLU'] = {'sugar': _value};
  170. // _isConnect = false;
  171. // });
  172. // }
  173. // void _onConnectFail(sender, e) {
  174. // print('连接设备失败');
  175. // _connectFailStatus = true;
  176. // _connectSuccessStatus = false;
  177. // _connectDisconnectedStatus = false;
  178. // _isConnect = false;
  179. // setState(() {});
  180. // }
  181. // void _onConnectSuccess(sender, e) {
  182. // _connectSuccessStatus = true;
  183. // _isConnect = false;
  184. // _connectFailStatus = false;
  185. // _connectDisconnectedStatus = false;
  186. // setState(() {});
  187. // }
  188. // void _onDisconnected(sender, e) {
  189. // print('设备连接中断');
  190. // _connectDisconnectedStatus = true;
  191. // _connectSuccessStatus = false;
  192. // _connectFailStatus = false;
  193. // _isConnect = false;
  194. // setState(() {});
  195. // }
  196. // Future<void> getPermission() async {
  197. // await permissionManager.requestLocationPermission();
  198. // await permissionManager.requestBluetoothConnectPermission();
  199. // await permissionManager.requestBluetoothAdvertisePermission();
  200. // await permissionManager.requestBluetoothScanPermission();
  201. // }
  202. // @override
  203. // Widget build(BuildContext context) {
  204. // return Stack(
  205. // children: [
  206. // _buildTemperature(),
  207. // if (_connectFailStatus)
  208. // DeviceConnectFail(
  209. // connect: () => connect(),
  210. // ),
  211. // if (_connectSuccessStatus) const DeviceConnectSuccess(),
  212. // if (_isConnect) const DeviceConnect(),
  213. // if (_connectDisconnectedStatus)
  214. // DeviceConnectDisconnected(
  215. // connect: () => connect(),
  216. // ),
  217. // ],
  218. // );
  219. // }
  220. // Widget _buildTemperature() {
  221. // return ExamCard(
  222. // title: '血糖',
  223. // clickCard: () {
  224. // _inputTemperature();
  225. // },
  226. // content: Container(
  227. // alignment: Alignment.bottomRight,
  228. // padding: const EdgeInsets.only(
  229. // bottom: 20,
  230. // right: 30,
  231. // left: 40,
  232. // ),
  233. // constraints: const BoxConstraints(minHeight: 150),
  234. // child: FittedBox(
  235. // child: Row(
  236. // mainAxisAlignment: MainAxisAlignment.end,
  237. // crossAxisAlignment: CrossAxisAlignment.end,
  238. // children: [
  239. // RichText(
  240. // text: TextSpan(
  241. // text: _value,
  242. // style: const TextStyle(
  243. // fontSize: 80,
  244. // color: Colors.black,
  245. // ),
  246. // children: const [
  247. // TextSpan(
  248. // text: 'mmol/L',
  249. // style: TextStyle(fontSize: 25),
  250. // )
  251. // ],
  252. // ),
  253. // ),
  254. // ],
  255. // ),
  256. // ),
  257. // ),
  258. // );
  259. // }
  260. // Future<void> _inputTemperature() async {
  261. // String? result = await VDialogNumber(
  262. // title: '血糖',
  263. // initialValue: _value,
  264. // ).show();
  265. // if (result?.isNotEmpty ?? false) {
  266. // _value = result ?? '';
  267. // }
  268. // }
  269. // }