dashboard_controller.dart 2.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. import 'package:domain/entity/response/device_list_entity.dart';
  2. import 'package:domain/entity/response/s_g_dashboard_entity.dart';
  3. import 'package:domain/repository/job_sg_repository.dart';
  4. import 'package:get/get.dart';
  5. import 'package:plugin_platform/http/dio/dio_cancelable_mixin.dart';
  6. import 'package:widgets/load_state_layout.dart';
  7. import 'package:widgets/widget_export.dart';
  8. import 'dashboard_state.dart';
  9. class DashboardController extends GetxController with DioCancelableMixin {
  10. final JobSGRepository _jobRepository = Get.find();
  11. final DashboardState state = DashboardState();
  12. var _needShowPlaceholder = true;
  13. //页面PlaceHolder的展示
  14. LoadState loadingState = LoadState.State_Success;
  15. String? errorMessage;
  16. //刷新页面状态
  17. void changeLoadingState(LoadState state) {
  18. loadingState = state;
  19. update();
  20. }
  21. // Refresh 控制器
  22. final EasyRefreshController refreshController = EasyRefreshController(
  23. controlFinishRefresh: true,
  24. controlFinishLoad: false,
  25. );
  26. // Refresh 刷新事件
  27. Future onRefresh() async {
  28. fetchList();
  29. }
  30. // 重试请求
  31. Future retryRequest() async {
  32. _needShowPlaceholder = true;
  33. fetchList();
  34. }
  35. /// 获取服务器数据,通知消息列表
  36. Future fetchList() async {
  37. if (_needShowPlaceholder) {
  38. changeLoadingState(LoadState.State_Loading);
  39. }
  40. // 获取 Applied 列表
  41. var listResult = await _jobRepository.fetchDashboardList(
  42. cancelToken: cancelToken,
  43. );
  44. // 处理数据
  45. if (listResult.isSuccess) {
  46. handleList(listResult.data?.agencyList);
  47. } else {
  48. errorMessage = listResult.errorMsg;
  49. changeLoadingState(LoadState.State_Error);
  50. }
  51. // 最后赋值
  52. _needShowPlaceholder = false;
  53. }
  54. // 处理数据与展示的逻辑
  55. void handleList(List<SGDashboardAgencyList>? list) {
  56. if (list != null && list.isNotEmpty) {
  57. //有数据
  58. state.datas.clear();
  59. state.datas.addAll(list);
  60. refreshController.finishRefresh();
  61. //更新展示的状态
  62. changeLoadingState(LoadState.State_Success);
  63. } else {
  64. //展示无数据的布局
  65. state.datas.clear();
  66. changeLoadingState(LoadState.State_Empty);
  67. refreshController.finishRefresh();
  68. }
  69. }
  70. @override
  71. void onReady() {
  72. super.onReady();
  73. fetchList();
  74. }
  75. @override
  76. void onClose() {
  77. state.datas.clear();
  78. super.onClose();
  79. }
  80. }