heart_check_new.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. /// 心电的列表
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vitalapp/architecture/utils/advance_debounce.dart';
  5. import 'package:vitalapp/components/appbar.dart';
  6. import 'package:vitalapp/components/button.dart';
  7. import 'package:vitalapp/pages/medical/widgets/health_heart_check/view.dart';
  8. import 'package:vitalapp/pages/medical/widgets/twelve_ecg.dart';
  9. import 'package:vnote_device_plugin/consts/types.dart';
  10. import 'package:vitalapp/pages/medical/controller.dart';
  11. import 'package:vitalapp/store/store.dart';
  12. import 'table_input_dialog/widgets/physical_exam_electrocardiogram.dart';
  13. class HeartCheckNew extends GetView<MedicalController> {
  14. const HeartCheckNew({super.key});
  15. @override
  16. Widget build(BuildContext context) {
  17. return Scaffold(
  18. resizeToAvoidBottomInset: false,
  19. body: Container(
  20. height: double.maxFinite,
  21. color: Colors.white,
  22. child: HeartTableCheck(
  23. checkDialog: PhysicalExamElectrocardiogramPage(),
  24. checkKey: "HEIECG",
  25. ),
  26. ),
  27. );
  28. }
  29. }
  30. class PhysicalExamElectrocardiogramPage extends GetView<MedicalController> {
  31. final String? recordCode;
  32. PhysicalExamElectrocardiogramPage({this.recordCode});
  33. @override
  34. Widget build(BuildContext context) {
  35. return PhysicalExamElectrocardiogram(
  36. _buildDeviceImage(DeviceTypes.TWELVEHEART),
  37. _buildMedicalInput(DeviceTypes.TWELVEHEART),
  38. _buildSaveButton());
  39. }
  40. Widget _buildMedicalInput(String? currentTab) {
  41. return Expanded(
  42. flex: currentTab == DeviceTypes.TWELVEHEART ? 18 : 11,
  43. child: Stack(
  44. children: [
  45. Container(
  46. padding: const EdgeInsets.all(16),
  47. child: Column(
  48. children: [
  49. _buildContent(),
  50. ],
  51. ),
  52. ),
  53. ],
  54. ),
  55. );
  56. }
  57. String _deviceImageUrl(String? currentTab) {
  58. switch (currentTab) {
  59. case DeviceTypes.TEMP:
  60. return 'assets/images/healthCheck/temp.png';
  61. case DeviceTypes.SUGAR:
  62. return 'assets/images/healthCheck/sugar.png';
  63. case DeviceTypes.NIBP:
  64. return 'assets/images/healthCheck/nibp.png';
  65. case DeviceTypes.SPO2:
  66. return 'assets/images/healthCheck/spo2.png';
  67. case DeviceTypes.WEIGHT:
  68. return 'assets/images/healthCheck/bmi.png';
  69. case DeviceTypes.URINE:
  70. return 'assets/images/healthCheck/urine.png';
  71. case DeviceTypes.WAIST:
  72. return 'assets/images/healthCheck/whb.png';
  73. default:
  74. return 'assets/images/exam/normalMeasurementChart.png';
  75. }
  76. }
  77. Widget _buildDeviceImage(String? currentTab) {
  78. if (currentTab == DeviceTypes.TWELVEHEART) {
  79. return const SizedBox();
  80. }
  81. return Expanded(
  82. flex: 7,
  83. child: Container(
  84. alignment: Alignment.topCenter,
  85. margin: const EdgeInsets.all(16).copyWith(top: 10),
  86. child: Obx(
  87. () => ClipRect(
  88. child: Align(
  89. alignment: Alignment.bottomCenter,
  90. heightFactor: 0.8,
  91. child: controller.state.currentTab != null
  92. ? Image.asset(
  93. _deviceImageUrl(controller.state.currentTab),
  94. height: double.infinity,
  95. fit: BoxFit.contain, // 设置图像的适应方式
  96. )
  97. : Container(),
  98. ),
  99. ),
  100. ),
  101. ),
  102. );
  103. }
  104. Widget _buildSaveButton() {
  105. return Obx(() {
  106. if (Store.user.currentSelectRegisterPersonInfo == null) {
  107. return const SizedBox();
  108. }
  109. return VButton(
  110. // backgroundColor: Theme.of(context).primaryColor,
  111. onTap: () {
  112. Debouncer.run(
  113. () => controller.createHeart(
  114. Store.user.currentSelectRegisterPersonInfo?.physicalExamNumber ??
  115. '',
  116. 'HEIECG',
  117. recordCode ?? '',
  118. ),
  119. );
  120. },
  121. child: const SizedBox(
  122. width: 240,
  123. height: 60,
  124. child: Center(
  125. child: Text(
  126. '提交',
  127. style: TextStyle(
  128. fontSize: 26,
  129. color: Colors.white,
  130. ),
  131. ),
  132. ),
  133. ),
  134. );
  135. });
  136. }
  137. Widget _buildContent() {
  138. return const TwelveHeartRate();
  139. }
  140. }