loadMore method
Appends the next page — same trade as ResourceListProvider.loadMore():
a failure here keeps whatever is already on screen, but loadMoreFailed
still flips so the trailing row can show a retry instead of a spinner
that never resolves into anything the user is told about. A 401 is that
method's same exception, for its same reason.
Implementation
Future<void> loadMore() async {
if (!_hasMore || _isLoadingMore || _status.isLoading) return;
final requestId = ++_requestId;
_isLoadingMore = true;
_loadMoreFailed = false;
_errorMessage = null;
notifyListeners();
try {
final page = await _source.relation(
resourceKey,
id,
relation,
page: _page + 1,
search: _searchTerm,
sort: _activeSort?.key,
direction: _activeSort?.direction,
);
if (requestId != _requestId) return;
_records = [..._records, ...page.records];
_page = page.meta.currentPage;
_hasMore = page.meta.hasMore;
} catch (e) {
if (requestId != _requestId) return;
_errorMessage = messageOf(e);
_loadMoreFailed = true;
if (e is FilamentTransportException && e.statusCode == 401) {
_isUnauthenticated = true;
_status = LoadStatus.failure;
}
}
_isLoadingMore = false;
notifyListeners();
}