controller.dart 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  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(code: code);
  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. void _onlineChanged(_, e) {
  78. state.isOnline = e;
  79. }
  80. /// 重新加载列表
  81. Future<void> reloadList({bool isFilter = false}) async {
  82. busy = true;
  83. state.pageIndex = 0;
  84. state.dataList = [];
  85. if (kIsOnline) {
  86. final request = PatientPageRequest(
  87. keyword: state.searchString,
  88. startTime: state.startTime.value,
  89. endTime: state.endTime.value?.add(const Duration(days: 1)),
  90. crowdLabels: crowdLabelsController.state.selectedCodes,
  91. );
  92. var offlineList = await _patientManager.getPagedOfflineList(request);
  93. if (offlineList != null) state.appendDataList(offlineList);
  94. }
  95. await loadNextPageList(isFilter: isFilter);
  96. }
  97. /// 加载下一页列表
  98. Future<void> loadNextPageList({bool isFilter = false}) async {
  99. busy = true;
  100. final request = PatientPageRequest(
  101. pageIndex: state.pageIndex + 1,
  102. pageSize: state.pageSize,
  103. keyword: state.searchString,
  104. startTime: state.startTime.value,
  105. endTime: state.endTime.value?.add(const Duration(days: 1)),
  106. crowdLabels: crowdLabelsController.state.selectedCodes,
  107. );
  108. final pagedList = await _patientManager.getPagedList(request);
  109. if (pagedList != null) {
  110. state.totalCount = pagedList.dataCount;
  111. if (pagedList.pageData != null) {
  112. state.pageIndex = state.pageIndex + 1;
  113. state.appendDataList(pagedList.pageData!);
  114. }
  115. }
  116. busy = false;
  117. }
  118. @override
  119. void onClose() {
  120. netChecker.onlineChangedEvent.removeListener(_onlineChanged);
  121. }
  122. }