getItemsLoadMore method

Future<void> getItemsLoadMore(
  1. String itemCategory,
  2. int itemsPageNumber,
  3. GetItemsLoadMore getItemsLoadMore
)

Implementation

Future<void> getItemsLoadMore(
  String itemCategory,
  int itemsPageNumber,
  GetItemsLoadMore getItemsLoadMore,
) async {
  getItemsLoadMore.onLoading();

  final url = Uri.parse(
      'https://api.plentrasphere.com/v2/client/?class=default&action=getItems&appKey=$appKey&page=$itemsPageNumber&categoryId=$itemCategory');

  try {
    final response = await http.get(url);

    if (response.statusCode == 200) {
      final jsonData = json.decode(response.body);

      final code = jsonData['response']['code'];
      final status = jsonData['response']['status'];

      if (code == 401) {
        getItemsLoadMore.onError(status);
        getItemsLoadMore.onLoadfinished();
        return;
      } else if (code == 404) {
        getItemsLoadMore.onNotFound();
        getItemsLoadMore.onLoadfinished();
        return;
      } else if (code == 400) {
        if (status == "app-expired") {
          getItemsLoadMore.onAppNotActive(jsonData['info']['appName']);
          getItemsLoadMore.onLoadfinished();
          return;
        }

        getItemsLoadMore.onError(status);
        getItemsLoadMore.onLoadfinished();
        return;
      } else if (code == 406) {
        getItemsLoadMore.onError(status);
        return;
      }

      if (status == "under-construction") {
        getItemsLoadMore.onUnderConstruction();
        getItemsLoadMore.onLoadfinished();
        return;
      }

      final info = jsonData['info'];
      final itemsInThisPage = (info['itemsInThisPage']);
      final totalItemCount = (info['totalItemCount']);

      if (info['nextPage']['status']) {
        getItemsLoadMore.onNextPage(info['nextPage']['page']);
      } else {
        getItemsLoadMore.onNoNextPage();
      }

      if (itemsInThisPage != 0) {
        final List<dynamic> items = [];
        final _items = jsonData['items'];

        _items.forEach((element) {
          items.add({
            'itemName': element['itemName'],
            'itemId': element['itemId'],
            'extras': element['extras'],
            'itemImage': element['itemImage'],
          });
        });

        getItemsLoadMore.onResult(
          itemCategory,
          totalItemCount,
          itemsInThisPage,
          (info['itemsPerPage']),
          items,
        );
      } else {
        getItemsLoadMore.onEmpty();
      }

      getItemsLoadMore.onLoadfinished();
    } else {
      getItemsLoadMore.onError('HTTP ${response.statusCode}');
      getItemsLoadMore.onLoadfinished();
    }
  } catch (e) {
    getItemsLoadMore.onError(e.toString());
    getItemsLoadMore.onLoadfinished();
  }
}