inoculate_history_from.dart 4.2 KB

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