follow_up_from.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:image_picker/image_picker.dart';
  5. import 'package:intl/intl.dart';
  6. import 'package:vitalapp/architecture/storage/storage.dart';
  7. import 'package:vitalapp/components/cell.dart';
  8. import 'package:vitalapp/components/dialog_date.dart';
  9. import 'package:vitalapp/components/dialog_select.dart';
  10. import 'package:vitalapp/consts/rpc_enum_labels.dart';
  11. import 'package:vitalapp/consts/styles.dart';
  12. import 'package:vitalapp/pages/check/follow_up/controller.dart';
  13. import 'package:vitalapp/rpc.dart';
  14. import 'package:vitalapp/store/store.dart';
  15. import '../models/select_model.dart';
  16. class FollowUpFrom extends GetView<FollowUpController> {
  17. const FollowUpFrom({super.key});
  18. @override
  19. Widget build(BuildContext context) {
  20. return _buildFollowUp();
  21. }
  22. Widget _buildFollowUp() {
  23. return Card(
  24. elevation: 6,
  25. shape: RoundedRectangleBorder(
  26. borderRadius: GlobalStyles.borderRadius,
  27. ),
  28. margin: const EdgeInsets.all(16),
  29. child: Material(
  30. color: Colors.white,
  31. borderRadius: const BorderRadius.all(
  32. GlobalStyles.borderRadiusValue,
  33. ),
  34. child: Container(
  35. padding: const EdgeInsets.symmetric(horizontal: 16),
  36. child: Column(
  37. children: [
  38. _buildFrom(),
  39. ],
  40. )),
  41. ),
  42. );
  43. }
  44. Widget _buildFrom() {
  45. return Obx(
  46. () => VListFormCellGroup(
  47. // mainAxisAlignment: MainAxisAlignment.center,
  48. children: [
  49. VListFormCell(
  50. label: '居民姓名',
  51. labelWidth: 130,
  52. content: controller.patientName,
  53. ),
  54. VListFormCell(
  55. label: '随访医生',
  56. labelWidth: 130,
  57. content: Store.user.displayName,
  58. ),
  59. VListFormCell(
  60. label: '本次随访日期',
  61. labelWidth: 130,
  62. content: getFollowUpTime(controller.state.followUpTime),
  63. onTap: () async {
  64. final result = await VDialogDate(
  65. title: '本次随访日期',
  66. initialValue: controller.state.followUpTime,
  67. ).show();
  68. controller.state.followUpTime = result;
  69. },
  70. ),
  71. VListFormCell(
  72. label: '下次随访日期',
  73. labelWidth: 130,
  74. content: getFollowUpTime(controller.state.nextFollowUpTime),
  75. onTap: () async {
  76. final result = await VDialogDate(
  77. title: '下次随访日期',
  78. initialValue: controller.state.nextFollowUpTime,
  79. minimumDate: controller.state.followUpTime,
  80. ).show();
  81. controller.state.nextFollowUpTime = result;
  82. },
  83. ),
  84. VListFormCell(
  85. label: '随访方式',
  86. labelWidth: 130,
  87. content: RpcEnumLabels.followUpMode[controller.state.followUpMode],
  88. onTap: () async {
  89. final result = await VDialogSelect<SelectModel, FollowUpModeEnum>(
  90. source: controller.state.followUpModeEnumSelectList,
  91. valueGetter: (data) => data.code,
  92. labelGetter: (data) => data.name,
  93. initialValue: controller.state.followUpMode,
  94. ).show();
  95. controller.state.followUpMode = result;
  96. },
  97. ),
  98. VListFormCell(
  99. label: '拍照',
  100. labelWidth: 130,
  101. contentWidget: _buildFollowImage(controller.state.followUpPhoto),
  102. onTap: () async {
  103. XFile? image =
  104. await ImagePicker().pickImage(source: ImageSource.camera);
  105. final url = await rpc.storage.upload(image!);
  106. controller.state.followUpPhoto = url;
  107. },
  108. ),
  109. ],
  110. ),
  111. );
  112. }
  113. Widget _buildFollowImage(String? followUpPhoto) {
  114. if (followUpPhoto?.isNotEmpty ?? false) {
  115. return Image.network(followUpPhoto!);
  116. } else {
  117. return const SizedBox();
  118. }
  119. }
  120. String getFollowUpTime(DateTime? time) {
  121. // print(time);
  122. if (time != null) {
  123. return DateFormat('yyyy-MM-dd').format(time);
  124. }
  125. return '';
  126. }
  127. }