選択できるのは25トピックまでです。 トピックは、先頭が英数字で、英数字とダッシュ('-')を使用した35文字以内のものにしてください。
 
 
 
 
 
 

150 行
4.5 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/global/global_class/selected_item.dart';
  3. import 'package:qadirneyriz/models/meetings/one_meeting_model.dart';
  4. import 'package:qadirneyriz/services/meetings/meetings.dart';
  5. import 'package:qadirneyriz/utils/enums/status.dart';
  6. class MeetingEditState extends ChangeNotifier {
  7. MeetingsApi meetingApi = MeetingsApi();
  8. Map<int, Status> oneMeetingStatus = {};
  9. Map<int, OneMeetingModel>? oneMeetingModel = {};
  10. Future<Status> getOneMeeting({bool refresh = false, required int id}) async {
  11. oneMeetingStatus[id] = Status.loading;
  12. notifyListeners();
  13. // Ensure the status map is initialized
  14. if (oneMeetingStatus[id] == null || refresh) {
  15. oneMeetingStatus[id] = Status.loading;
  16. notifyListeners();
  17. }
  18. // Initialize the model map if it's null
  19. oneMeetingModel ??= {};
  20. // If not refreshing and data exists, return the current state
  21. if (!refresh && oneMeetingModel![id] != null) {
  22. oneMeetingStatus[id] = Status.ready;
  23. notifyListeners();
  24. return oneMeetingStatus[id]!;
  25. }
  26. // Otherwise, fetch new data from API
  27. try {
  28. oneMeetingModel![id] = await meetingApi.getOneMeeting(id: id);
  29. if (oneMeetingModel![id] != null) {
  30. oneMeetingStatus[id] = Status.ready;
  31. } else {
  32. oneMeetingStatus[id] = Status.empty;
  33. }
  34. } catch (e) {
  35. oneMeetingStatus[id] = Status.error;
  36. // print(e);
  37. }
  38. notifyListeners();
  39. return oneMeetingStatus[id]!;
  40. }
  41. // date
  42. String? fromDate;
  43. void setFromDate(String date) {
  44. fromDate = date;
  45. notifyListeners();
  46. }
  47. // subject
  48. ItemSelected selectedSubject = ItemSelected();
  49. // location
  50. ItemSelected selectedLocation = ItemSelected();
  51. // manager
  52. ItemSelected selectedManager = ItemSelected();
  53. //users
  54. List<int> selectedUsersItems = [];
  55. // time
  56. TimeOfDay? selectedStartTime;
  57. TimeOfDay? selectedEndTime;
  58. // function at start
  59. void setAllVariablesAtStart({required int id}) {
  60. if (oneMeetingStatus[id] == Status.ready) {
  61. final item = oneMeetingModel![id]!;
  62. selectedLocation = ItemSelected(
  63. id: item.locationsId ?? -1,
  64. text: item.location != null ? item.location!.address ?? '' : '');
  65. selectedSubject = ItemSelected(
  66. text: item.subject != null ? item.subject!.subject ?? '' : '',
  67. id: item.subject != null ? item.subject!.id ?? -1 : -1);
  68. selectedManager = ItemSelected(
  69. id: item.managerId ?? -1,
  70. text: item.manager != null ? item.manager!.name ?? '' : '');
  71. fromDate = item.dateJalali;
  72. String timeStart = item.azHour ?? ':';
  73. List<String> timeParts = timeStart.split(':');
  74. int hourStart = int.parse(timeParts[0]);
  75. int minuteStart = int.parse(timeParts[1]);
  76. selectedStartTime = TimeOfDay(hour: hourStart, minute: minuteStart);
  77. String timeEnd = item.taHour ?? ':';
  78. List<String> timeEndParts = timeEnd.split(':');
  79. int hourEnd = int.parse(timeEndParts[0]);
  80. int minuteEnd = int.parse(timeEndParts[1]);
  81. selectedEndTime = TimeOfDay(hour: hourEnd, minute: minuteEnd);
  82. // پر کردن لیست کاربران انتخاب شده
  83. selectedUsersItems = item.users!.map((user) => user.id ?? -1).toList();
  84. }
  85. }
  86. // send edit meeting
  87. Status statusEitMeeting = Status.empty;
  88. String? messageEditMeeting;
  89. Map? errorsEditMeeting;
  90. Future<Status> editMeeting(
  91. {required int id,
  92. required int locationId,
  93. required int subjectId,
  94. required int managerId,
  95. required String fromHour,
  96. required String toHour,
  97. required String dateMeeting,
  98. required List<int> members}) async {
  99. statusEitMeeting = Status.loading;
  100. notifyListeners();
  101. try {
  102. final result = await meetingApi.editMeetingApi(
  103. id: id,
  104. locationId: locationId,
  105. subjectId: subjectId,
  106. managerId: managerId,
  107. fromHour: fromHour,
  108. toHour: toHour,
  109. dateMeeting: dateMeeting,
  110. members: members);
  111. if (result.isOk) {
  112. statusEitMeeting = Status.ready;
  113. messageEditMeeting = result.message;
  114. } else if (result.isOk == false) {
  115. errorsEditMeeting = result.errors;
  116. messageEditMeeting = result.message;
  117. statusEitMeeting = Status.error;
  118. } else {
  119. statusEitMeeting = Status.error;
  120. }
  121. notifyListeners();
  122. } catch (e) {
  123. statusEitMeeting = Status.error;
  124. // print(e);
  125. }
  126. notifyListeners();
  127. // print(statusEitMeeting);
  128. return statusEitMeeting;
  129. }
  130. }