import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:test_sa/api/device_transfer_api_client.dart'; import 'package:test_sa/controllers/providers/loading_notifier.dart'; import '../../../models/device/device_transfer.dart'; import '../../../models/device/device_transfer_info.dart'; import '../../../models/user.dart'; import '../../http_status_manger/http_status_manger.dart'; import '../../localization/localization.dart'; class DeviceTransferProvider extends LoadingNotifier { // number of items call in each request final pageItemNumber = 50; //reset provider data void reset() { items.clear(); 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; // list of user requests List items = []; Future getRequests() async { waitApiRequest(() async { items.clear(); items.addAll(await DeviceTransferApiClient().getRequests(items: items, pageItemNumber: pageItemNumber)); print(items); notifyListeners(); if (items.length == pageItemNumber) { nextPage = true; } else { nextPage = false; } }, onSuccess: () { stateCode = 200; notifyListeners(); }); } Future createRequest({required DeviceTransfer model, required BuildContext context}) async { final subtitle = AppLocalization.of(context)?.subtitle; waitApiRequest(() async { items.insert(0, await DeviceTransferApiClient().createRequest(model: model)); notifyListeners(); }, onSuccess: () { Fluttertoast.showToast( msg: subtitle?.requestCompleteSuccessfully ?? "", ); Navigator.of(context).pop(); }, onError: (error) { String errorMessage = HttpStatusManger.getStatusMessage(status: error.error?.errorCode, subtitle: subtitle); ScaffoldMessenger.of(context).showSnackBar(SnackBar( content: Text(errorMessage), )); }); } Future updateRequest({ required String host, required User user, required bool isSender, required String requestId, required DeviceTransfer oldModel, required DeviceTransferInfo newModel, }) async { reset(); oldModel = await DeviceTransferApiClient().updateRequest(isSender: isSender, requestId: requestId, oldModel: oldModel, newModel: newModel); notifyListeners(); } }