inoculate_history_from.dart 4.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162
  1. import 'package:flutter/foundation.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:intl/intl.dart';
  5. import 'package:vitalapp/architecture/app_parameters.dart';
  6. import 'package:vitalapp/architecture/types/index.dart';
  7. import 'package:vitalapp/components/alert_dialog.dart';
  8. import 'package:vitalapp/components/cell.dart';
  9. import 'package:vitalapp/components/dialog_date.dart';
  10. import 'package:vitalapp/components/dialog_input.dart';
  11. import 'package:vitalapp/pages/check/models/form.dart';
  12. /// 住院史
  13. class InoculateHistoryFrom extends StatefulWidget {
  14. const InoculateHistoryFrom({
  15. Key? key,
  16. required this.fromResult,
  17. required this.currentId,
  18. this.admissionJson,
  19. }) : super(key: key);
  20. final ValueCallback fromResult;
  21. final int currentId;
  22. final Map<String, dynamic>? admissionJson;
  23. @override
  24. _HospitalizationHistoryFormState createState() =>
  25. _HospitalizationHistoryFormState();
  26. }
  27. class _HospitalizationHistoryFormState extends State<InoculateHistoryFrom> {
  28. VaccinationHistory vaccinationHistory = VaccinationHistory();
  29. @override
  30. void initState() {
  31. if (widget.admissionJson != null) {
  32. vaccinationHistory = VaccinationHistory.fromJson(widget.admissionJson!);
  33. }
  34. super.initState();
  35. }
  36. @override
  37. Widget build(BuildContext context) {
  38. return VAlertDialog(
  39. title: "预防接种史填写",
  40. width: 600,
  41. content: Container(
  42. height: 350,
  43. padding: const EdgeInsets.symmetric(horizontal: 24),
  44. alignment: Alignment.center,
  45. child: VListFormCellGroup(
  46. children: [
  47. _buildFormCell(
  48. label: '疫苗名称',
  49. content: vaccinationHistory.vaccineName,
  50. onTap: () async {
  51. final result = await _showInputDialog(
  52. title: '疫苗名称',
  53. initialValue: vaccinationHistory.vaccineName ?? '',
  54. );
  55. vaccinationHistory.vaccineName = result;
  56. setState(() {});
  57. },
  58. ),
  59. _buildFormCell(
  60. label: '接种日期',
  61. content: vaccinationHistory.vaccinationDate,
  62. onTap: () async {
  63. final result = await _showDateDialog(
  64. title: '接种日期',
  65. initialValue: vaccinationHistory.vaccinationDate,
  66. );
  67. if (result != null) {
  68. vaccinationHistory.vaccinationDate =
  69. DateFormat("yyyy-MM-dd").format(result);
  70. }
  71. setState(() {});
  72. },
  73. ),
  74. _buildFormCell(
  75. label: '接种机构',
  76. content: vaccinationHistory.vaccinationFacility,
  77. onTap: () async {
  78. final result = await _showInputDialog(
  79. title: '接种机构',
  80. initialValue: vaccinationHistory.vaccinationFacility ?? '',
  81. );
  82. vaccinationHistory.vaccinationFacility = result;
  83. setState(() {});
  84. },
  85. ),
  86. ],
  87. ),
  88. ),
  89. onConfirm: () {
  90. if (widget.admissionJson != null) {
  91. widget.fromResult.call(
  92. EditTableValue(
  93. id: widget.currentId,
  94. value: vaccinationHistory.toJson(),
  95. ),
  96. );
  97. } else {
  98. vaccinationHistory.id = widget.currentId.toString();
  99. widget.fromResult.call(vaccinationHistory.toJson());
  100. }
  101. Get.back();
  102. },
  103. );
  104. }
  105. Future<DateTime?> _showDateDialog({
  106. required String title,
  107. String? initialValue,
  108. }) async {
  109. DateTime? result;
  110. var initValue =
  111. initialValue == null ? DateTime.now() : DateTime.parse(initialValue);
  112. bool _isLocalStation = AppParameters.data.isLocalStation;
  113. if (kIsWeb || _isLocalStation) {
  114. result = await showDatePicker(
  115. context: Get.context!,
  116. initialDate: initValue,
  117. firstDate: DateTime(1900),
  118. lastDate: DateTime(2100),
  119. );
  120. } else {
  121. result = await VDialogDate(
  122. title: title,
  123. initialValue: initValue,
  124. ).show();
  125. }
  126. return result;
  127. }
  128. Future<String?> _showInputDialog({
  129. required String title,
  130. required String initialValue,
  131. }) async {
  132. final result = await VDialogInput(
  133. title: title,
  134. initialValue: initialValue,
  135. ).show();
  136. return result;
  137. }
  138. Widget _buildFormCell({
  139. required String label,
  140. String? content,
  141. required VoidCallback onTap,
  142. }) {
  143. return VListFormCell(
  144. label: label,
  145. content: content ?? '',
  146. onTap: onTap,
  147. );
  148. }
  149. }