8c00ee21c7
Both providers were FutureProvider<Paged<T>> returning a single page of 50, so once the user scrolled past 50 items the list just ended. Replace with AsyncNotifier<Paged<T>> that exposes loadMore(): fetches the next page using items.length as the offset and appends to the existing list. Idempotent guard via _loadingMore flag — concurrent scroll events near the bottom collapse to a single fetch. Both tabs now wrap the GridView in NotificationListener<ScrollNotification> that fires loadMore() when within 800px of maxScrollExtent. The lookahead is enough that the next page lands before the user hits the visible bottom on a typical phone scroll. Pull-to-refresh updated to invalidate + re-await the provider so a manual refresh always starts from the first page.