Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.
 
 
 
 
 
 

342 wiersze
9.6 KiB

  1. import 'package:flutter/material.dart';
  2. import 'package:qadirneyriz/models/meetings/meetings_location_model.dart';
  3. import 'package:qadirneyriz/models/meetings/meetings_managers_model.dart';
  4. import 'package:qadirneyriz/models/meetings/meetings_subjects_model.dart';
  5. import 'package:qadirneyriz/models/meetings/meetings_users_model.dart';
  6. import 'package:qadirneyriz/screens/meeting/diolog_meetings_filters.dart';
  7. import 'package:qadirneyriz/setting/setting.dart';
  8. import 'package:qadirneyriz/utils/enums/status.dart';
  9. class GlobalState extends ChangeNotifier {
  10. // users meetings
  11. Status usersStatus = Status.empty;
  12. List<UsersModel>? usersModel;
  13. Future<Status> getUsers({bool refresh = false}) async {
  14. usersStatus = Status.loading;
  15. notifyListeners();
  16. if (refresh) {
  17. usersStatus = Status.loading;
  18. notifyListeners();
  19. }
  20. if (usersModel != null && usersModel!.isNotEmpty) {
  21. usersStatus = Status.ready;
  22. try {
  23. usersModel = await setting.globalServices.getUsers();
  24. if (usersModel != null) {
  25. usersStatus = Status.ready;
  26. } else {
  27. usersStatus = Status.empty;
  28. }
  29. } catch (e) {
  30. usersStatus = Status.error;
  31. print('$e error usersModel');
  32. }
  33. notifyListeners();
  34. } else {
  35. try {
  36. usersModel = await setting.globalServices.getUsers();
  37. if (usersModel != null) {
  38. usersStatus = Status.ready;
  39. } else {
  40. usersStatus = Status.empty;
  41. }
  42. notifyListeners();
  43. } catch (e) {
  44. usersStatus = Status.error;
  45. print('$e error usersModel');
  46. }
  47. }
  48. notifyListeners();
  49. print('$usersStatus usersModel');
  50. return usersStatus;
  51. }
  52. // locations meetings
  53. Status locationsStatus = Status.empty;
  54. List<LocationsModel>? locationsModel;
  55. Future<Status> getLocations({bool refresh = false}) async {
  56. locationsStatus = Status.loading;
  57. notifyListeners();
  58. if (refresh) {
  59. locationsStatus = Status.loading;
  60. notifyListeners();
  61. }
  62. if (locationsModel != null && locationsModel!.isNotEmpty) {
  63. locationsStatus = Status.ready;
  64. try {
  65. locationsModel = await setting.globalServices.getLocation();
  66. if (locationsModel != null) {
  67. locationsStatus = Status.ready;
  68. } else {
  69. locationsStatus = Status.empty;
  70. }
  71. } catch (e) {
  72. locationsStatus = Status.error;
  73. print(e);
  74. }
  75. notifyListeners();
  76. } else {
  77. try {
  78. locationsModel = await setting.globalServices.getLocation();
  79. if (locationsModel != null) {
  80. locationsStatus = Status.ready;
  81. } else {
  82. locationsStatus = Status.empty;
  83. }
  84. notifyListeners();
  85. } catch (e) {
  86. locationsStatus = Status.error;
  87. print(e);
  88. }
  89. }
  90. notifyListeners();
  91. print(locationsStatus);
  92. return locationsStatus;
  93. }
  94. // subjects meetings
  95. Status subjectsStatus = Status.empty;
  96. List<SubjectsModel>? subjectsModel;
  97. Future<Status> getSubjects({bool refresh = false}) async {
  98. subjectsStatus = Status.loading;
  99. notifyListeners();
  100. if (refresh) {
  101. subjectsStatus = Status.loading;
  102. notifyListeners();
  103. }
  104. if (subjectsModel != null && subjectsModel!.isNotEmpty) {
  105. subjectsStatus = Status.ready;
  106. try {
  107. subjectsModel = await setting.globalServices.getSubjects();
  108. if (subjectsModel != null) {
  109. subjectsStatus = Status.ready;
  110. } else {
  111. subjectsStatus = Status.empty;
  112. }
  113. } catch (e) {
  114. subjectsStatus = Status.error;
  115. print(e);
  116. }
  117. notifyListeners();
  118. } else {
  119. try {
  120. subjectsModel = await setting.globalServices.getSubjects();
  121. if (subjectsModel != null) {
  122. subjectsStatus = Status.ready;
  123. } else {
  124. subjectsStatus = Status.empty;
  125. }
  126. notifyListeners();
  127. } catch (e) {
  128. subjectsStatus = Status.error;
  129. print(e);
  130. }
  131. }
  132. notifyListeners();
  133. print(subjectsStatus);
  134. return subjectsStatus;
  135. }
  136. // managers meetings
  137. Status meetingsManagerStatus = Status.empty;
  138. List<MeetingsMangersModel>? meetingsManagerModel;
  139. Future<Status> getMeetingsManager({bool refresh = false}) async {
  140. meetingsManagerStatus = Status.loading;
  141. notifyListeners();
  142. if (refresh) {
  143. meetingsManagerStatus = Status.loading;
  144. notifyListeners();
  145. }
  146. if (meetingsManagerModel != null && meetingsManagerModel!.isNotEmpty) {
  147. meetingsManagerStatus = Status.ready;
  148. try {
  149. meetingsManagerModel = await setting.globalServices.getManagers();
  150. if (meetingsManagerModel != null) {
  151. meetingsManagerStatus = Status.ready;
  152. } else {
  153. meetingsManagerStatus = Status.empty;
  154. }
  155. } catch (e) {
  156. meetingsManagerStatus = Status.error;
  157. print(e);
  158. }
  159. notifyListeners();
  160. } else {
  161. try {
  162. meetingsManagerModel = await setting.globalServices.getManagers();
  163. if (meetingsManagerModel != null) {
  164. meetingsManagerStatus = Status.ready;
  165. } else {
  166. meetingsManagerStatus = Status.empty;
  167. }
  168. notifyListeners();
  169. } catch (e) {
  170. meetingsManagerStatus = Status.error;
  171. print(e);
  172. }
  173. }
  174. notifyListeners();
  175. print(meetingsManagerStatus);
  176. return meetingsManagerStatus;
  177. }
  178. // statuses meetings
  179. List<MeetingsStatus> meetingStatuses = [
  180. MeetingsStatus(id: 1, title: 'جلسات برگذار شده'),
  181. MeetingsStatus(id: 2, title: 'جلسات موکول شده'),
  182. MeetingsStatus(id: 3, title: 'جلسات لغو شده'),
  183. MeetingsStatus(id: 4, title: 'جلسات منتظر برگذاری'),
  184. ];
  185. // load all items together
  186. Status allFiltersStatus = Status.empty;
  187. Future<Status> getAllFiltersItems({bool refresh = false}) async {
  188. if (_isDataAlreadyLoaded()) {
  189. allFiltersStatus = Status.ready;
  190. } else {
  191. allFiltersStatus = Status.loading;
  192. }
  193. notifyListeners();
  194. await _fetchAllData(refresh: refresh);
  195. _updateAllFiltersStatus();
  196. notifyListeners();
  197. return allFiltersStatus;
  198. }
  199. bool _isDataAlreadyLoaded() {
  200. return locationsModel != null &&
  201. locationsModel!.isNotEmpty &&
  202. usersModel != null &&
  203. usersModel!.isNotEmpty &&
  204. meetingsManagerModel != null &&
  205. meetingsManagerModel!.isNotEmpty &&
  206. subjectsModel != null &&
  207. subjectsModel!.isNotEmpty;
  208. }
  209. Future<void> _fetchAllData({required bool refresh}) async {
  210. await Future.wait([
  211. getLocations(refresh: refresh),
  212. getMeetingsManager(refresh: refresh),
  213. getSubjects(refresh: refresh),
  214. getUsers(refresh: refresh),
  215. ]);
  216. }
  217. void _updateAllFiltersStatus() {
  218. if (locationsStatus == Status.ready &&
  219. subjectsStatus == Status.ready &&
  220. usersStatus == Status.ready &&
  221. meetingsManagerStatus == Status.ready) {
  222. allFiltersStatus = Status.ready;
  223. } else {
  224. allFiltersStatus = Status.error;
  225. }
  226. }
  227. // add new subject
  228. Status statusAddNewSubject = Status.empty;
  229. String? messageAddNewSubject;
  230. Map? errorsAddNewSubject;
  231. Future<Status> addNewSubject({required String subject}) async {
  232. statusAddNewSubject = Status.loading;
  233. notifyListeners();
  234. try {
  235. final result =
  236. await setting.globalServices.addNewSubject(subject: subject);
  237. if (result.isOk) {
  238. statusAddNewSubject = Status.ready;
  239. messageAddNewSubject = result.message;
  240. } else if (result.isOk == false) {
  241. errorsAddNewSubject = result.errors;
  242. messageAddNewSubject = result.message;
  243. statusAddNewSubject = Status.error;
  244. } else {
  245. statusAddNewSubject = Status.error;
  246. }
  247. notifyListeners();
  248. } catch (e) {
  249. statusAddNewSubject = Status.error;
  250. }
  251. notifyListeners();
  252. return statusAddNewSubject;
  253. }
  254. // add new address
  255. Status statusAddNewAddress = Status.empty;
  256. String? messageAddNewAddress;
  257. Map? errorsAddNewAddress;
  258. Future<Status> addNewAddress({required String address}) async {
  259. statusAddNewAddress = Status.loading;
  260. notifyListeners();
  261. try {
  262. final result =
  263. await setting.globalServices.addNewLocation(address: address);
  264. if (result.isOk) {
  265. statusAddNewAddress = Status.ready;
  266. messageAddNewAddress = result.message;
  267. } else if (result.isOk == false) {
  268. errorsAddNewAddress = result.errors;
  269. messageAddNewAddress = result.message;
  270. statusAddNewAddress = Status.error;
  271. } else {
  272. statusAddNewAddress = Status.error;
  273. }
  274. notifyListeners();
  275. } catch (e) {
  276. statusAddNewAddress = Status.error;
  277. }
  278. notifyListeners();
  279. return statusAddNewAddress;
  280. }
  281. // add new user
  282. Status statusAddNewUser = Status.empty;
  283. String? messageAddNewUser;
  284. Map? errorsAddNewUser;
  285. Future<Status> addNewUser(
  286. {required String name,
  287. required String mobile,
  288. required String password,
  289. required int role}) async {
  290. statusAddNewUser = Status.loading;
  291. notifyListeners();
  292. try {
  293. final result = await setting.globalServices.addNewUser(
  294. mobile: mobile, name: name, password: password, role: role);
  295. if (result.isOk) {
  296. statusAddNewUser = Status.ready;
  297. messageAddNewUser = result.message;
  298. } else if (result.isOk == false) {
  299. errorsAddNewUser = result.errors;
  300. messageAddNewUser = result.message;
  301. statusAddNewUser = Status.error;
  302. } else {
  303. statusAddNewUser = Status.error;
  304. }
  305. notifyListeners();
  306. } catch (e) {
  307. statusAddNewUser = Status.error;
  308. }
  309. notifyListeners();
  310. return statusAddNewUser;
  311. }
  312. }