You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
cloudsolutions-atoms/lib/controllers/providers/api/regular_visits_provider.dart

131 lines
4.2 KiB
Dart

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<void>(
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<Pentry?> 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);
},
);
}
}