exam_urinalys.dart 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152
  1. import 'package:flutter/material.dart';
  2. import 'package:vitalapp/components/dialog_input.dart';
  3. import 'package:vnote_device_plugin/consts/types.dart';
  4. import 'package:vitalapp/pages/check/widgets/exam_configurable/exam_card.dart';
  5. import 'package:vitalapp/pages/medical/controller.dart';
  6. /// 尿常规
  7. class ExamUrinalysis extends StatefulWidget {
  8. const ExamUrinalysis({
  9. super.key,
  10. required this.currentValue,
  11. required this.urinalysis,
  12. });
  13. final Map currentValue;
  14. final Function(Map) urinalysis;
  15. @override
  16. State<ExamUrinalysis> createState() => _ExamUrinalysisState();
  17. }
  18. class _ExamUrinalysisState extends State<ExamUrinalysis> {
  19. String? deviceType = MedicalController.typeConvertMap[DeviceTypes.URINE];
  20. List<Map<String, String>> urinalysis = [
  21. {"name": '尿白细胞', "key": 'LEU'},
  22. {"name": '红细胞/潜血', "key": 'BLD'},
  23. {"name": '尿亚硝酸盐', "key": 'NIT'},
  24. {"name": '酮体', "key": 'KET'},
  25. {"name": '尿胆原', "key": 'UBG'},
  26. {"name": '胆红素', "key": 'BIL'},
  27. {"name": '尿蛋白', "key": 'PRO'},
  28. {"name": '葡萄糖', "key": 'GLU'},
  29. {"name": '酸碱度', "key": 'PH'},
  30. {"name": '尿比重', "key": 'SG'},
  31. {"name": '维生素C', "key": 'VC'},
  32. ];
  33. Map _value = {};
  34. @override
  35. void initState() {
  36. initUrinalys();
  37. super.initState();
  38. }
  39. Future<void> initUrinalys() async {
  40. await initData();
  41. }
  42. Future<void> initData() async {
  43. _value = widget.currentValue;
  44. setState(() {});
  45. }
  46. @override
  47. void dispose() {
  48. super.dispose();
  49. }
  50. @override
  51. Widget build(BuildContext context) {
  52. return Stack(
  53. children: [
  54. _buildUrinalysis(),
  55. ],
  56. );
  57. }
  58. Widget _buildUrinalysis() {
  59. return ExamCard(
  60. title: '尿常规',
  61. // clickCard: () {
  62. // _input();
  63. // },
  64. content: Container(
  65. width: double.infinity,
  66. alignment: Alignment.center,
  67. padding: const EdgeInsets.only(
  68. bottom: 20,
  69. right: 30,
  70. left: 40,
  71. ),
  72. // constraints: const BoxConstraints(minHeight: 50),
  73. child: GridView.count(
  74. shrinkWrap: true,
  75. childAspectRatio: 12,
  76. crossAxisCount: 2, // 列数为2,即两列布局
  77. children: urinalysis.map((item) {
  78. return _buildUrineItem(item);
  79. }).toList(),
  80. ),
  81. ),
  82. );
  83. }
  84. Widget _buildUrineItem(Map<String, String> urine) {
  85. return InkWell(
  86. onTap: () {
  87. _input(urine['name']!, urine['key']!);
  88. },
  89. child: Container(
  90. child: Row(
  91. mainAxisAlignment: MainAxisAlignment.start,
  92. crossAxisAlignment: CrossAxisAlignment.center,
  93. children: [
  94. Container(
  95. alignment: Alignment.center,
  96. width: 180,
  97. child: Row(
  98. children: [
  99. Text(
  100. urine['key']!,
  101. style: const TextStyle(
  102. fontSize: 22,
  103. color: Colors.black,
  104. ),
  105. ),
  106. Text(
  107. '(${urine['name']!})',
  108. // text: _value.isEmpty ? '--' : _value,
  109. textAlign: TextAlign.center,
  110. style: const TextStyle(
  111. fontSize: 22,
  112. ),
  113. ),
  114. ],
  115. ),
  116. ),
  117. Text(
  118. _value[urine['key']!] ?? '',
  119. // text: _value.isEmpty ? '--' : _value,
  120. style: const TextStyle(
  121. fontSize: 26,
  122. ),
  123. )
  124. ],
  125. ),
  126. ),
  127. );
  128. }
  129. Future<void> _input(String name, String key) async {
  130. String? result = await VDialogInput(
  131. title: name,
  132. initialValue: _value[key],
  133. ).show();
  134. if (result?.isNotEmpty ?? false) {
  135. _value[key] = result ?? '';
  136. }
  137. widget.urinalysis(_value);
  138. setState(() {});
  139. }
  140. }