import 'dart:convert'; import 'package:flutter/cupertino.dart'; import 'package:http/http.dart'; import 'package:test_sa/controllers/api_routes/api_manager.dart'; import 'package:test_sa/controllers/api_routes/urls.dart'; import 'package:test_sa/models/system_notification_model.dart'; import 'package:test_sa/models/user.dart'; class NotificationsProvider extends ChangeNotifier { // number of items call in each request final pageItemNumber = 12; //reset provider data void reset() { notifications = []; nextPage = true; stateCode = null; } // state code of current request to defied error message // like 400 customer request failed// 500 service not available int? stateCode; // true if there is next page in product list and false if not bool nextPage = true; // Properly initialized // list of user requests List notifications = []; // when requests in-process _loading = true // done _loading = true // failed _loading = false bool isLoading = false; /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart Future getSystemNotifications({required User user, bool resetProvider = false}) async { if (isLoading == true) return -2; if (resetProvider) { reset(); } isLoading = true; notifyListeners(); late Response response; try { final Map body = {"pageSize": pageItemNumber, "pageNumber": notifications.length ~/ pageItemNumber + 1, "userId": user.userID}; response = await ApiManager.instance.post(URLs.getSystemNotifications, body: body); stateCode = response.statusCode; print('notifaction response is ${response}'); if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(response.body)["data"]; List _serviceRequestsPage = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList(); if (notifications == null) notifications = []; notifications.addAll(_serviceRequestsPage); // Update nextPage based on response length nextPage = _serviceRequestsPage.length == pageItemNumber; } isLoading = false; notifyListeners(); return response.statusCode; } catch (error) { print(error); isLoading = false; stateCode = -1; notifyListeners(); return -1; } } /// return -2 if request in progress /// return -1 if error happen when sending request /// return state code if request complete may be 200, 404 or 403 /// for more details check http state manager /// lib\controllers\http_status_manger\http_status_manger.dart Future?> getRecentNotifications({ required String host, required User user, }) async { late Response response; //userId = 397.toString(); // testing id to view data try { response = await get(Uri.parse(host + URLs.getSystemNotifications + "?uid=${user.id}&token=${user.token}"), headers: {"Content-Type": "application/json; charset=utf-8"}); stateCode = response.statusCode; if (response.statusCode >= 200 && response.statusCode < 300) { // client's request was successfully received List requestsListJson = json.decode(utf8.decode(response.bodyBytes)); List _recentNotifications = requestsListJson.map((request) => SystemNotificationModel.fromJson(request)).toList(); return _recentNotifications; } return null; } catch (error) { return null; } } }