Browse Source

优化全屏的30s心电图像

gavin.chen 1 year ago
parent
commit
94a5701614

+ 21 - 5
lib/pages/medical/widgets/ecg_view/controller.dart

@@ -1,6 +1,7 @@
 import 'dart:async';
 
 import 'package:get/get.dart';
+import 'package:vitalapp/architecture/utils/prompt_box.dart';
 
 import 'index.dart';
 
@@ -47,28 +48,28 @@ class EcgViewController extends GetxController {
   void addData(List<int> data) {
     if (allPoints.isEmpty) {
       startTime = DateTime.now().millisecondsSinceEpoch;
-      startTimer();
+      _startTimer();
     }
     allPoints.addAll(data);
     if (isPaused) {
       isPaused = false;
-      startTimer();
+      _startTimer();
     }
   }
 
   /// 开启定时器,每隔一定时间添加一次数据,并且更新UI
-  void startTimer() {
+  void _startTimer() {
     timer = Timer.periodic(
       Duration(milliseconds: updatePeriod),
       (timer) {
         // print("timer: ${timer.tick}");
-        updateData();
+        _updateData();
       },
     );
   }
 
   /// 每帧更新数据
-  void updateData() {
+  void _updateData() {
     // 计算当前数据位
     currentDataIndex = (DateTime.now().millisecondsSinceEpoch - startTime) ~/
         (1000 ~/ dataPerSecond);
@@ -102,11 +103,26 @@ class EcgViewController extends GetxController {
 
   void openFullScreenDialog() {
     print("当前点总数为:${allPoints.length}");
+    if (allPoints.length < dataPerSecond * 30) {
+      PromptBox.toast("未完成检测,数据量不足");
+      return;
+    }
     Get.dialog(
       const FullScreenEcgDataDialog(),
     );
   }
 
+  void reset() {
+    allPoints.clear();
+    newPointsToDraw.clear();
+    oldPointsToDraw.clear();
+    startTime = DateTime.now().millisecondsSinceEpoch;
+    currentDataIndex = 0;
+    timer.cancel();
+    isPaused = false;
+    update(['ecg_view']);
+  }
+
   // @override
   // void onInit() {
   //   super.onInit();

+ 3 - 0
lib/pages/medical/widgets/ecg_view/widgets/full_screen_ecg_data_dialog.dart

@@ -11,6 +11,7 @@ class FullScreenEcgDataDialog extends GetView<EcgViewController> {
     const designWidth = 1280.0; // 设计尺寸宽度:1280
     final width = Get.width;
     final scale = width / designWidth; // 计算缩放比例
+    final ScrollController scrollController = ScrollController();
     return Container(
       width: Get.width * 0.9 / scale,
       height: Get.height * 0.9 / scale,
@@ -27,7 +28,9 @@ class FullScreenEcgDataDialog extends GetView<EcgViewController> {
               thumbVisibility: true,
               thickness: 10,
               radius: const Radius.circular(10),
+              controller: scrollController,
               child: SingleChildScrollView(
+                controller: scrollController,
                 padding: const EdgeInsets.only(left: 10, right: 10, bottom: 20),
                 physics: const BouncingScrollPhysics(),
                 scrollDirection: Axis.horizontal,