onPageLoad method
Future<PlutoLazyPaginationResponse>
onPageLoad(
- 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));
}