loadPage method
Future
loadPage(
{ - PageKeyType? nextPageKey,
- bool isRefresh = false,
})
Implementation
Future loadPage({PageKeyType? nextPageKey, bool isRefresh = false}) async {
if (cancelableOperation != null && !cancelableOperation!.isCompleted) {
cancelableOperation!.cancel();
}
var items =
_pagingState.maybeMap((value) => value.items, orElse: () => null);
cancelableOperation = CancelableOperation.fromFuture(
dataSource.loadPage(isRefresh: isRefresh, newKey: nextPageKey));
cancelableOperation!.value.then((value) {
int? itemCount = isRefresh
? [...value].length
: items != null
? [...items, ...value].length
: [...value].length;
bool hasNextPage = dataSource.currentKey != null && !dataSource.isEndList;
bool hasItems = itemCount > 0;
bool isListingUnfinished = hasItems && hasNextPage;
bool isOngoing = isListingUnfinished;
bool isCompleted = hasItems && !hasNextPage;
/// The current pagination status.
PagingStatus status =
(isOngoing) ? PagingStatus.ongoing : PagingStatus.completed;
emit(PagingState<PageKeyType, ItemType>(
isRefresh
? [...value]
: items != null
? [...items, ...value]
: [...value],
status,
false));
}, onError: (e) {
if (dataSource.currentKey == null) {
emit(PagingState<PageKeyType, ItemType>.error(e));
} else {
_pagingState.maybeMap(
(value) => emit(PagingState<PageKeyType, ItemType>(
value.items, PagingStatus.noItemsFound, true)),
orElse: () => null);
}
});
// await dataSource.loadPage(isRefresh: isRefresh).then((value) {
// int? itemCount = isRefresh
// ? [...value].length
// : items != null
// ? [...items, ...value].length
// : [...value].length;
//
// bool hasNextPage = dataSource.currentKey != null && !dataSource.isEndList;
//
// bool hasItems = itemCount > 0;
//
// bool isListingUnfinished = hasItems && hasNextPage;
//
// bool isOngoing = isListingUnfinished;
//
// bool isCompleted = hasItems && !hasNextPage;
//
// /// The current pagination status.
// PagingStatus status =
// (isOngoing) ? PagingStatus.ongoing : PagingStatus.completed;
//
// emit(PagingState<PageKeyType, ItemType>(
// isRefresh
// ? [...value]
// : items != null
// ? [...items, ...value]
// : [...value],
// status,
// false));
// }, onError: (e) {
// if (dataSource.currentKey == null) {
// emit(PagingState<PageKeyType, ItemType>.error(e));
// } else {
// _pagingState.maybeMap(
// (value) => emit(PagingState<PageKeyType, ItemType>(
// value.items, PagingStatus.noItemsFound, true)),
// orElse: () => null);
// }
// });
}