onPageLoad method

Future<PlutoLazyPaginationResponse> onPageLoad(
  1. PlutoLazyPaginationRequest request
)

Implementation

Future<PlutoLazyPaginationResponse> onPageLoad(
    PlutoLazyPaginationRequest request) async {
  // rows are filtered?
  var filter = request.filterRows.isNotEmpty;

  // rows are sorted?
  var sort = request.sortColumn != null && !request.sortColumn!.sort.isNone;

  // total number of rows
  var rows = widget.model.getDataRowCount();

  // page size
  var pageSize = widget.model.pageSize;
  if (pageSize <= 0) pageSize = 10;

  // total number of pages
  var pages = (rows / pageSize).ceil();

  // build rows
  if (filter || sort) {
    // build all
    buildAllRows();
  } else {
    // build only as many as required
    buildOutRows(pageSize * request.page);
  }

  // build the list
  List<PlutoRow> tempList = this.rows.toList();

  // filter the list
  if (filter) {
    tempList = applyFilters(tempList);

    pages = (tempList.length / pageSize).ceil();
    if (pages < 0) pages = 1;
  }

  // sort the list
  if (sort) {
    tempList = applySort(tempList);
  }

  final page = request.page;
  final start = (page - 1) * pageSize;
  final end = start + pageSize;

  // get list of rows
  var fetchedRows =
  tempList.getRange(max(0, start), min(tempList.length, end)).toList();

  return Future.value(
      PlutoLazyPaginationResponse(totalPage: pages, rows: fetchedRows));
}