import 'package:flutter/material.dart'; import 'package:qadirneyriz/models/meetings/one_meeting_model.dart'; import 'package:qadirneyriz/screens/meeting_edit/screen.dart'; import 'package:qadirneyriz/services/meetings/meetings.dart'; import 'package:qadirneyriz/utils/enums/status.dart'; class MeetingEditState extends ChangeNotifier { MeetingsApi meetingApi = MeetingsApi(); Map oneMeetingStatus = {}; Map? oneMeetingModel = {}; Future getOneMeeting({bool refresh = false, required int id}) async { oneMeetingStatus[id] = Status.loading; notifyListeners(); // Ensure the status map is initialized if (oneMeetingStatus[id] == null || refresh) { oneMeetingStatus[id] = Status.loading; notifyListeners(); } // Initialize the model map if it's null oneMeetingModel ??= {}; // If not refreshing and data exists, return the current state if (!refresh && oneMeetingModel![id] != null) { oneMeetingStatus[id] = Status.ready; notifyListeners(); return oneMeetingStatus[id]!; } // Otherwise, fetch new data from API try { oneMeetingModel![id] = await meetingApi.getOneMeeting(id: id); if (oneMeetingModel![id] != null) { oneMeetingStatus[id] = Status.ready; } else { oneMeetingStatus[id] = Status.empty; } } catch (e) { oneMeetingStatus[id] = Status.error; print(e); } notifyListeners(); return oneMeetingStatus[id]!; } // date String? fromDate; void setFromDate(String date) { fromDate = date; notifyListeners(); } // subject ItemSelected selectedSubject = ItemSelected(); // location ItemSelected selectedLocation = ItemSelected(); // manager ItemSelected selectedManager = ItemSelected(); //users List selectedUsersItems = []; // time TimeOfDay? selectedStartTime; TimeOfDay? selectedEndTime; // function at start void setAllVariablesAtStart({required int id}) { if (oneMeetingStatus[id] == Status.ready) { final item = oneMeetingModel![id]!; selectedLocation = ItemSelected( id: item.locationsId ?? -1, text: item.location!.address ?? ''); selectedSubject = ItemSelected( text: item.subject!.subject ?? '', id: item.subject!.id ?? -1); selectedManager = ItemSelected( id: item.managerId ?? -1, text: item.manager!.name ?? ''); fromDate = item.dateJalali; String timeStart = item.azHour ?? ':'; List timeParts = timeStart.split(':'); int hourStart = int.parse(timeParts[0]); int minuteStart = int.parse(timeParts[1]); selectedStartTime = TimeOfDay(hour: hourStart, minute: minuteStart); String timeEnd = item.taHour ?? ':'; List timeEndParts = timeEnd.split(':'); int hourEnd = int.parse(timeEndParts[0]); int minuteEnd = int.parse(timeEndParts[1]); selectedEndTime = TimeOfDay(hour: hourEnd, minute: minuteEnd); // پر کردن لیست کاربران انتخاب شده selectedUsersItems = item.users!.map((user) => user.id ?? -1).toList(); } } // send edit meeting Status statusEitMeeting = Status.empty; String? messageEditMeeting; Map? errorsEditMeeting; Future editMeeting( {required int id, required int locationId, required int subjectId, required int managerId, required String fromHour, required String toHour, required String dateMeeting, required List members}) async { statusEitMeeting = Status.loading; notifyListeners(); try { final result = await meetingApi.editMeetingApi( id: id, locationId: locationId, subjectId: subjectId, managerId: managerId, fromHour: fromHour, toHour: toHour, dateMeeting: dateMeeting, members: members); if (result.isOk) { statusEitMeeting = Status.ready; messageEditMeeting = result.message; } else if (result.isOk == false) { print(result.isOk); errorsEditMeeting = result.errors; messageEditMeeting = result.message; statusEitMeeting = Status.error; } else { statusEitMeeting = Status.error; } notifyListeners(); } catch (e) { statusEitMeeting = Status.error; print(e); } notifyListeners(); print(statusEitMeeting); return statusEitMeeting; } }