import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:fluttertoast/fluttertoast.dart'; import 'package:test_sa/api/visits_api_client.dart'; import 'package:test_sa/controllers/providers/loading_notifier.dart'; import '../../../models/pantry/pentry.dart'; import '../../../models/visits/visit.dart'; import '../../../models/visits/visits_group.dart'; import '../../../models/visits/visits_search.dart'; import '../../../views/pages/user/visits/update_visits_group_sheet.dart'; import '../../http_status_manger/http_status_manger.dart'; import '../../localization/localization.dart'; class RegularVisitsProvider extends LoadingNotifier { // number of items call in each request final pageItemNumber = 50; // reset provider data void reset() { VisitsApiClient().visits.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; VisitsSearch? visitsSearch = VisitsSearch(); Future getVisits() async { await waitApiRequest( () async { await VisitsApiClient().getVisits(pageItemNumber: pageItemNumber, visitsSearch: visitsSearch); }, onSuccess: () { /// TODO : this is temporary stateCode = 200; if (VisitsApiClient().visits.length == pageItemNumber) { nextPage = true; } else { nextPage = false; } }, onError: (error) { /// TODO : this is temporary stateCode = error.error?.errorCode; }, ); } Future updateGroupOfVisits(BuildContext context) async { final subtitle = AppLocalization.of(context)?.subtitle; VisitsGroup? group = await showModalBottomSheet( isScrollControlled: true, context: context, builder: (context) { return UpdateVisitsGroupSheet(visits: VisitsApiClient().visits, title: subtitle?.updateRegularVisits); }, ) as VisitsGroup?; if (context.mounted && group != null) { showDialog( context: context, barrierDismissible: false, builder: (BuildContext context) { return CupertinoAlertDialog( title: Text(subtitle?.updatingDots ?? ''), content: const Center(child: CircularProgressIndicator()), ); }, ); await waitApiRequest( () async { await VisitsApiClient().updateGroupOfVisits(group: group); reset(); }, onSuccess: () { /// TODO : this is temporary stateCode = 200; Navigator.of(context).pop(); Fluttertoast.showToast( msg: subtitle?.regularVisitsUpdatedSuccessfully ?? '', toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); }, onError: (error) { /// TODO : this is temporary stateCode = error.error?.errorCode; Fluttertoast.showToast( msg: HttpStatusManger.getStatusMessage(status: error.error?.errorCode, subtitle: subtitle), toastLength: Toast.LENGTH_LONG, gravity: ToastGravity.BOTTOM, ); }, ); } } Future getPently({required String? id}) async { return id == null ? null : await VisitsApiClient().getPentry(id); } void updatePentry(BuildContext context, {required Pentry? pentry, required Visit? visit}) async { final subtitle = AppLocalization.of(context)?.subtitle; await waitApiRequest( () async { await VisitsApiClient().updatePentry(pentry: pentry, visit: visit); }, onSuccess: () { /// TODO : this is temporary stateCode = 200; if (subtitle != null) { Fluttertoast.showToast(msg: subtitle.requestCompleteSuccessfully); } }, onError: (error) { /// TODO : this is temporary stateCode = error.error?.errorCode; String errorMessage = HttpStatusManger.getStatusMessage(status: error.error?.errorCode, subtitle: subtitle); Fluttertoast.showToast(msg: errorMessage); }, ); } }