Du kan inte välja fler än 25 ämnen Ämnen måste starta med en bokstav eller siffra, kan innehålla bindestreck ('-') och vara max 35 tecken långa.
 
 
 
 
 
 

149 rader
4.4 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/models/meetings/one_meeting_model.dart';
  3. import 'package:qadirneyriz/screens/meeting_edit/screen.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, text: item.location!.address ?? '');
  64. selectedSubject = ItemSelected(
  65. text: item.subject!.subject ?? '', id: item.subject!.id ?? -1);
  66. selectedManager = ItemSelected(
  67. id: item.managerId ?? -1, text: item.manager!.name ?? '');
  68. fromDate = item.dateJalali;
  69. String timeStart = item.azHour ?? ':';
  70. List<String> timeParts = timeStart.split(':');
  71. int hourStart = int.parse(timeParts[0]);
  72. int minuteStart = int.parse(timeParts[1]);
  73. selectedStartTime = TimeOfDay(hour: hourStart, minute: minuteStart);
  74. String timeEnd = item.taHour ?? ':';
  75. List<String> timeEndParts = timeEnd.split(':');
  76. int hourEnd = int.parse(timeEndParts[0]);
  77. int minuteEnd = int.parse(timeEndParts[1]);
  78. selectedEndTime = TimeOfDay(hour: hourEnd, minute: minuteEnd);
  79. // پر کردن لیست کاربران انتخاب شده
  80. selectedUsersItems = item.users!.map((user) => user.id ?? -1).toList();
  81. }
  82. }
  83. // send edit meeting
  84. Status statusEitMeeting = Status.empty;
  85. String? messageEditMeeting;
  86. Map? errorsEditMeeting;
  87. Future<Status> editMeeting(
  88. {required int id,
  89. required int locationId,
  90. required int subjectId,
  91. required int managerId,
  92. required String fromHour,
  93. required String toHour,
  94. required String dateMeeting,
  95. required List<int> members}) async {
  96. statusEitMeeting = Status.loading;
  97. notifyListeners();
  98. try {
  99. final result = await meetingApi.editMeetingApi(
  100. id: id,
  101. locationId: locationId,
  102. subjectId: subjectId,
  103. managerId: managerId,
  104. fromHour: fromHour,
  105. toHour: toHour,
  106. dateMeeting: dateMeeting,
  107. members: members);
  108. if (result.isOk) {
  109. statusEitMeeting = Status.ready;
  110. messageEditMeeting = result.message;
  111. } else if (result.isOk == false) {
  112. print(result.isOk);
  113. errorsEditMeeting = result.errors;
  114. messageEditMeeting = result.message;
  115. statusEitMeeting = Status.error;
  116. } else {
  117. statusEitMeeting = Status.error;
  118. }
  119. notifyListeners();
  120. } catch (e) {
  121. statusEitMeeting = Status.error;
  122. print(e);
  123. }
  124. notifyListeners();
  125. print(statusEitMeeting);
  126. return statusEitMeeting;
  127. }
  128. }