controller.dart 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. import 'package:fis_jsonrpc/rpc.dart';
  2. import 'package:flutter/material.dart';
  3. import 'package:get/get.dart';
  4. import 'package:vitalapp/architecture/defines.dart';
  5. import 'package:vitalapp/architecture/network_connectivity.dart';
  6. import 'package:vitalapp/global.dart';
  7. import 'package:vitalapp/managers/interfaces/patient.dart';
  8. import 'package:vitalapp/pages/controllers/crowd_labels.dart';
  9. import 'package:vitalapp/pages/home/controller.dart';
  10. import 'package:vitalapp/pages/medical/controller.dart';
  11. import 'package:vitalapp/pages/patient/detail/controller.dart';
  12. import 'package:vitalapp/store/store.dart';
  13. import 'package:fis_common/logger/logger.dart';
  14. import 'state.dart';
  15. class PatientListController extends FControllerBase {
  16. final GlobalKey<ScaffoldState> scaffoldKey = GlobalKey<ScaffoldState>();
  17. final state = PatientListState();
  18. final _homeController = Get.find<HomeController>();
  19. final _patientDetailController = Get.find<PatientDetailController>();
  20. // final createPatientController = Get.find<CreatePatientController>();
  21. final _patientManager = Get.find<IPatientManager>();
  22. final crowdLabelsController = CrowdLabelsController();
  23. void patientListGotoDetail(PatientDTO dto) async {
  24. Store.user.currentSelectPatientInfo = dto;
  25. logger.i('list切换居民 当前居民是:${dto.patientName} 居民code:${dto.code}');
  26. gotoDetail(dto.code!);
  27. }
  28. /// 前进到用户详情页面
  29. Future<void> gotoDetail(
  30. String code, [
  31. PatientDTO? patientInfoDto,
  32. PatientBaseDTO? patientInfo,
  33. ]) async {
  34. // if (!Get.isRegistered<MedicalController>()) {
  35. // Get.lazyPut(() => MedicalController());
  36. // }
  37. // final medicalController = Get.find<MedicalController>();
  38. await _patientDetailController.loadData();
  39. _homeController.updateMenus();
  40. _homeController.switchNavByName("/patient/detail");
  41. // await medicalController.initData();
  42. //这里应该刷新病人诊断数据缓存
  43. // _medicalController.changePatient.emit(this, code);
  44. }
  45. Future<void> gotoCreate(
  46. String code, [
  47. PatientDTO? patientInfoDto,
  48. PatientBaseDTO? patientInfo,
  49. ]) async {
  50. _homeController.initMenus();
  51. if (patientInfo != null) {
  52. _homeController.switchNavByName(
  53. "/patient/create",
  54. patientInfo.toJson(),
  55. );
  56. }
  57. }
  58. /// 新建档案
  59. void onCreateClicked() {
  60. // Get.toNamed(
  61. // "/patient/create",
  62. // id: 1001,
  63. // parameters: {"from": "list"},
  64. // );
  65. _homeController.switchNavByName("/patient/create");
  66. }
  67. /// 筛选
  68. void onFilterClicked() {
  69. Get.snackbar("提示", "尚未开发此功能");
  70. }
  71. @override
  72. void onReady() {
  73. reloadList();
  74. netChecker.onlineChangedEvent.addListener(_onlineChanged);
  75. super.onReady();
  76. }
  77. @override
  78. void onInit() {
  79. super.onInit();
  80. }
  81. void _onlineChanged(_, e) {
  82. state.isOnline = e;
  83. }
  84. /// 重新加载列表
  85. Future<void> reloadList({bool isFilter = false}) async {
  86. busy = true;
  87. state.pageIndex = 0;
  88. state.dataList = [];
  89. if (kIsOnline) {
  90. final request = PatientPageRequest(
  91. keyword: state.searchString,
  92. startTime: state.startTime.value,
  93. endTime: state.endTime.value?.add(const Duration(days: 1)),
  94. crowdLabels: crowdLabelsController.state.selectedCodes,
  95. );
  96. var offlineList = await _patientManager.getPagedOfflineList(request);
  97. if (offlineList != null) state.appendDataList(offlineList);
  98. }
  99. await loadNextPageList(isFilter: isFilter);
  100. }
  101. /// 加载下一页列表
  102. Future<void> loadNextPageList({bool isFilter = false}) async {
  103. busy = true;
  104. final request = PatientPageRequest(
  105. pageIndex: state.pageIndex + 1,
  106. pageSize: state.pageSize,
  107. keyword: state.searchString,
  108. startTime: state.startTime.value,
  109. endTime: state.endTime.value?.add(const Duration(days: 1)),
  110. crowdLabels: crowdLabelsController.state.selectedCodes,
  111. );
  112. final pagedList = await _patientManager.getPagedList(request);
  113. if (pagedList != null) {
  114. state.totalCount = pagedList.dataCount;
  115. if (pagedList.pageData != null) {
  116. state.pageIndex = state.pageIndex + 1;
  117. state.appendDataList(pagedList.pageData!);
  118. }
  119. }
  120. busy = false;
  121. }
  122. @override
  123. void onClose() {
  124. netChecker.onlineChangedEvent.removeListener(_onlineChanged);
  125. }
  126. }