getPage<T> method

  1. @override
Future<PagyPage<T>> getPage<T>(
  1. PagyPageParams<T> params
)
override

Implementation

@override
Future<PagyPage<T>> getPage<T>(PagyPageParams<T> params) async {
  final response = await _remote.getPaginatedData(
    PagyParams(
      endPoint: params.endPoint,
      requestType: params.requestType,
      page: params.page,
      limit: params.limit,
      queryParameter: params.queryParameter,
      additionalQueryParams: params.additionalQueryParams,
      payloadData: params.payloadData,
      token: params.token,
      headers: params.headers,
      cancelToken: params.cancelToken,
      paginationMode: params.paginationMode,
      fromMap: params.fromMap,
    ),
  );

  if (response.data == null || response.data is! Map<String, dynamic>) {
    throw PagyError.malformedResponse(
      message: 'Response format is invalid',
    );
  }

  final parsed = params.responseParser(response.data as Map<String, dynamic>);
  final parsedList = parsed.list;

  final List<T> items = [];
  for (int i = 0; i < parsedList.length; i++) {
    try {
      items.add(params.fromMap(parsedList[i] as Map<String, dynamic>));
    } catch (e) {
      throw PagyError.malformedResponse(
        message: 'Parsing error on item $i. Please check your model or keys.',
      );
    }
  }

  return PagyPage<T>(
    items: items,
    totalPages: parsed.totalPages,
  );
}