loadMore method

Future<void> loadMore()

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();
}