Browse Source

优化心电异常处理

gavin.chen 1 year ago
parent
commit
1b3d40ef38

+ 2 - 0
lib/main.dart

@@ -1,4 +1,5 @@
 import 'dart:async';
+import 'dart:math';
 
 import 'package:flutter/material.dart';
 import 'package:fis_common/logger/logger.dart';
@@ -22,6 +23,7 @@ void main() async {
       runApp(const _App());
     },
     (error, stack) {
+      logger.e('runZonedGuarded Error', error);
       // GlobalErrorHandler.handle(error, stack);
     },
   );

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

@@ -27,7 +27,7 @@ class MedicalController extends FControllerBase {
   String patientCode = '';
   Map<String, dynamic> diagnosisDataValue = {};
 
-  late String appDataId;
+  String appDataId = "";
   final state = MedicalState();
   final recordDataCacheManager = Get.find<IRecordDataCacheManager>();
   static final typeConvertMap = <String, String>{
@@ -144,11 +144,16 @@ class MedicalController extends FControllerBase {
   }
 
   Future<bool?> saveCachedRecord() async {
-    return await recordDataCacheManager.saveRecordData(
-      appDataId,
-      patientCode,
-      diagnosisDataValue,
-    );
+    try {
+      return await recordDataCacheManager.saveRecordData(
+        appDataId,
+        patientCode,
+        diagnosisDataValue,
+      );
+    } catch (e) {
+      print(e);
+      return false;
+    }
   }
 
   Future<bool?> deleteDirectory() async {

+ 0 - 1
lib/pages/medical/widgets/ecg_view/controller.dart

@@ -5,7 +5,6 @@ import 'dart:ui';
 import 'package:flutter/foundation.dart';
 import 'package:flutter/material.dart';
 import 'package:get/get.dart';
-import 'package:vitalapp/architecture/utils/prompt_box.dart';
 import 'dart:ui' as ui;
 import 'index.dart';
 

+ 10 - 0
lib/pages/medical/widgets/ecg_view/widgets/ecg_painter_for_all.dart

@@ -25,6 +25,16 @@ class EcgPainterForAll extends CustomPainter {
     }
     if (allPoints.length < xDataCount) {
       /// 绘制一根x轴直线,补全剩余数据
+      final paint = Paint()
+        ..color = Colors.green
+        ..style = PaintingStyle.stroke
+        ..strokeWidth = 3.0;
+      final double xGridSize = size.width / xDataCount;
+      final startX = allPoints.length * xGridSize;
+      final startY = size.height / 2;
+      final endX = size.width;
+      final endY = size.height / 2;
+      canvas.drawLine(Offset(startX, startY), Offset(endX, endY), paint);
     }
   }
 

+ 43 - 32
lib/pages/medical/widgets/heart_rate.dart

@@ -163,13 +163,10 @@ class _HeartRateState extends State<HeartRate> {
                   }
                 }),
               ),
-              if (showResetButton)
-                _buildResetButton()
-              else
-                // _buildDebugButton()
-                const SizedBox(
-                  height: 48,
-                ),
+              Container(
+                // !! 这一层 Container 不能删 ,否则会引发 EcgView 的 controller 被异常删除
+                child: _buildResetButton(),
+              ),
             ],
           ),
         ),
@@ -183,30 +180,36 @@ class _HeartRateState extends State<HeartRate> {
     );
   }
 
-  Widget _buildDebugButton() {
-    return Container(
-      child: Row(
-        children: [
-          const Text(
-            '测试============?',
-            style: TextStyle(color: Colors.grey, fontSize: 24),
-          ),
-          TextButton(
-            onPressed: () {
-              debugTest();
-            },
-            child: const Text(
-              '重试',
-              style: TextStyle(color: Colors.blue, fontSize: 24),
-            ),
-          ),
-        ],
-      ),
-    );
-  }
+  // Widget _buildDebugButton() {
+  //   return Container(
+  //     child: Row(
+  //       children: [
+  //         const Text(
+  //           '测试============?',
+  //           style: TextStyle(color: Colors.grey, fontSize: 24),
+  //         ),
+  //         TextButton(
+  //           onPressed: () {
+  //             debugTest();
+  //           },
+  //           child: const Text(
+  //             '重试',
+  //             style: TextStyle(color: Colors.blue, fontSize: 24),
+  //           ),
+  //         ),
+  //       ],
+  //     ),
+  //   );
+  // }
 
   Widget _buildResetButton() {
+    if (!showResetButton) {
+      return const SizedBox(
+        height: 48,
+      );
+    }
     return Container(
+      padding: const EdgeInsets.only(left: 30),
       child: Row(
         children: [
           const Text(
@@ -285,7 +288,7 @@ class _HeartRateState extends State<HeartRate> {
       if (initEcgData != null &&
           initEcgData!.isNotEmpty &&
           initEcgData!.length < 125 * 30) {
-        print("数据不完整 ⭐⭐⭐⭐⭐⭐⭐");
+        // print("数据不完整 ⭐⭐⭐⭐⭐⭐⭐");
         showResetButton = true;
       }
     } else {
@@ -403,6 +406,7 @@ class _HeartRateState extends State<HeartRate> {
   /// 更新心率
   void _onHrValueUpdate(_, int e) {
     logger.i('心率更新:$e');
+
     if (_deviceError.isNotEmpty || _assess.isNotEmpty) {
       // 如果上次因错误而停止了,这里需要先重置
       _deviceError = '';
@@ -411,6 +415,7 @@ class _HeartRateState extends State<HeartRate> {
     }
     setState(() {
       _heart = e.toString();
+      showResetButton = false;
     });
   }
 
@@ -437,11 +442,17 @@ class _HeartRateState extends State<HeartRate> {
 
     /// 判断数据是否完整
     if (ecgPoint.isNotEmpty && ecgPoint.length < 125 * 30) {
-      print("数据不完整 ⭐⭐⭐⭐⭐⭐⭐");
+      // print("数据不完整 ⭐⭐⭐⭐⭐⭐⭐");
       showResetButton = true;
     }
-    medicalController.saveCachedRecord();
-    print(medicalController.diagnosisDataValue);
+
+    /// FIXME 解除下方注释
+    // try {
+    //   medicalController.saveCachedRecord();
+    // } catch (e) {
+    //   print(e);
+    // }
+    // print(medicalController.diagnosisDataValue);
     setState(() {});
   }