controller.dart 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. import 'package:electronic_assistant/base/base_controller.dart';
  2. import 'package:electronic_assistant/data/repositories/agenda_repository.dart';
  3. import 'package:electronic_assistant/module/agenda/utils.dart';
  4. import 'package:electronic_assistant/popup/agenda_time_popup.dart';
  5. import 'package:electronic_assistant/utils/error_handler.dart';
  6. import 'package:flutter/cupertino.dart';
  7. import 'package:get/get_rx/src/rx_types/rx_types.dart';
  8. import 'package:pull_to_refresh/pull_to_refresh.dart';
  9. import '../../data/api/request/agenda_request.dart';
  10. import '../../data/bean/agenda.dart';
  11. import '../../utils/time_utils.dart';
  12. import 'detail/view.dart';
  13. class AgendaController extends BaseController {
  14. AgendaTimeType? _timeFilterType;
  15. final _filterTxt = ''.obs;
  16. String get filterTxt => _filterTxt.value;
  17. final agendaDetailPopupTag = 'agendaDetailPopupTag';
  18. final todoIsExpanded = true.obs;
  19. final doneIsExpanded = true.obs;
  20. final refreshController = RefreshController(initialRefresh: false);
  21. final RxList<Agenda> agendaTodoList = <Agenda>[].obs;
  22. final RxList<Agenda> agendaDoneList = <Agenda>[].obs;
  23. final doneSize = 0.obs;
  24. final int limit = 10;
  25. AgendaTimeType? get timeFilterType => _timeFilterType;
  26. DateRange? searchTime;
  27. @override
  28. void onReady() {
  29. reset();
  30. refreshTodoTaskList();
  31. agendaDonePage(0, limit, isClearAll: true);
  32. }
  33. void reset() {
  34. _setTimeFilterType(AgendaTimeType.nearlyAWeek);
  35. }
  36. void onClickTimeType(AgendaTimeType type) {
  37. _setTimeFilterType(type);
  38. refreshTodoTaskList();
  39. agendaDonePage(0, limit, isClearAll: true);
  40. }
  41. void _setTimeFilterType(AgendaTimeType type) {
  42. _timeFilterType = type;
  43. _filterTxt.value = getAgendaFilterTxt(type);
  44. switch (type) {
  45. case AgendaTimeType.nearlyAWeek:
  46. searchTime = TimeUtils.getLastDates(const Duration(days: 7));
  47. break;
  48. case AgendaTimeType.nearlyTwoWeek:
  49. searchTime = TimeUtils.getLastDates(const Duration(days: 14));
  50. break;
  51. case AgendaTimeType.nearlyAMonth:
  52. searchTime = TimeUtils.getLastDates(const Duration(days: 31));
  53. break;
  54. case AgendaTimeType.customTime:
  55. searchTime = TimeUtils.getLastDates(const Duration());
  56. break;
  57. }
  58. }
  59. void onLoadMoreDoneData() {
  60. agendaDonePage(agendaDoneList.length, limit);
  61. }
  62. agendaDonePage(int offset, int limit, {bool? isClearAll}) {
  63. agendaRepository
  64. .agendaPage(
  65. offset, limit,
  66. completeStatus: TaskStatus.DONE,
  67. // startTime: searchTime?.startTime.millisecondsSinceEpoch,
  68. // endTime: searchTime?.endTime.millisecondsSinceEpoch
  69. )
  70. .then((response) {
  71. doneSize.value = response.count;
  72. if (isClearAll == true) {
  73. agendaDoneList.clear();
  74. }
  75. if (response.list != null) {
  76. agendaDoneList.addAll(response.list!);
  77. }
  78. if (agendaDoneList.length >= response.count) {
  79. debugPrint("refreshAgendaPage-没有更多数据了");
  80. refreshController.loadNoData();
  81. } else {
  82. refreshController.loadComplete();
  83. }
  84. refreshController.refreshCompleted();
  85. }).catchError((error) {
  86. refreshController.loadFailed();
  87. refreshController.refreshFailed();
  88. ErrorHandler.toastError(error);
  89. });
  90. }
  91. refreshTodoTaskList() {
  92. agendaRepository
  93. .agendaPage(
  94. 0, 999,
  95. completeStatus: TaskStatus.TODO,
  96. // startTime: searchTime?.startTime.millisecondsSinceEpoch,
  97. // endTime: searchTime?.endTime.millisecondsSinceEpoch
  98. )
  99. .then((response) {
  100. agendaTodoList.clear();
  101. if (response.list != null) {
  102. agendaTodoList.addAll(response.list!);
  103. }
  104. }).catchError((error) {
  105. ErrorHandler.toastError(error);
  106. });
  107. }
  108. void onClickTodoGroup() {
  109. todoIsExpanded.value = !todoIsExpanded.value;
  110. }
  111. void onClickDoneGroup() {
  112. doneIsExpanded.value = !doneIsExpanded.value;
  113. }
  114. void agendaComplete(Agenda item, bool isComplete) {
  115. agendaRepository.agendaFinish(item.id, isComplete).then((data) {
  116. agendaRepository.requestHomeAgendaData();
  117. _refreshData();
  118. }).catchError((error) {
  119. ErrorHandler.toastError(error);
  120. });
  121. }
  122. void _refreshData() {
  123. refreshTodoTaskList();
  124. int size;
  125. if (agendaDoneList.isEmpty || agendaDoneList.length < limit) {
  126. size = limit;
  127. } else {
  128. size = agendaDoneList.length;
  129. }
  130. agendaDonePage(0, size, isClearAll: true);
  131. }
  132. void onAgendaCancel(Agenda item) {
  133. agendaRepository.agendaTodo(item.id, false).then((value) {
  134. agendaRepository.requestHomeAgendaData();
  135. _refreshData();
  136. }).catchError((error) {
  137. ErrorHandler.toastError(error);
  138. });
  139. }
  140. void onAgendaUpdate(Agenda item) {
  141. AgendaDetailPage.start(item);
  142. }
  143. void clearFilterTime() {
  144. _timeFilterType = null;
  145. _filterTxt.value = '';
  146. searchTime = null;
  147. refreshTodoTaskList();
  148. agendaDonePage(0, limit, isClearAll: true);
  149. }
  150. }