flutter_pagination_pro 0.2.0 copy "flutter_pagination_pro: ^0.2.0" to clipboard
flutter_pagination_pro: ^0.2.0 copied to clipboard

Zero-dependency Flutter pagination: infinite scroll, load more button, grid view, slivers, and numbered pagination. Built-in loading/error/empty states, pull-to-refresh, cache-first initialItems, page [...]

Flutter Pagination Pro

Pub Version License: MIT Flutter

A lightweight, zero-dependency Flutter pagination package.
Infinite scroll, load more, grid, slivers, numbered pages — all in one.

Flutter Pagination Pro Preview

Why This Package? #

Feature flutter_pagination_pro infinite_scroll_pagination
Zero dependencies ❌ (sliver_tools)
ListView + GridView
Sliver variants
Numbered pagination
Load more button mode
Pull-to-refresh ✅ built-in Manual
initialItems (cache-first)
pageSize auto last-page
totalItems tracking
findChildIndexCallback
Separator support
Item mutation helpers ✅ (updateItems, removeWhere, insertItem)
Type-safe generics
Accessibility (semantics) Partial

Quick Start #

dependencies:
  flutter_pagination_pro: ^0.2.0

3 Lines to Paginated List #

PaginationListView<User>(
  fetchPage: (page) => api.getUsers(page: page),
  itemBuilder: (context, user, index) => ListTile(title: Text(user.name)),
)

That's it. Handles loading, errors, empty state, and infinite scroll automatically.

All Modes #

// Grid
PaginationGridView<Photo>(
  fetchPage: (page) => api.getPhotos(page: page),
  itemBuilder: (context, photo, index) => PhotoCard(photo: photo),
  gridDelegate: SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2),
)

// Load More Button
PaginationListView<User>(
  fetchPage: (page) => api.getUsers(page: page),
  itemBuilder: (context, user, index) => UserCard(user: user),
  paginationType: PaginationType.loadMore,
)

// Numbered Pagination
NumberedPagination(
  totalPages: 20,
  currentPage: _page,
  onPageChanged: (page) => setState(() => _page = page),
)

Slivers (CustomScrollView) #

CustomScrollView(
  controller: scrollController,
  slivers: [
    SliverAppBar(title: Text('Users'), floating: true),
    SliverPaginatedList<User>(
      controller: controller,
      scrollController: scrollController,
      itemBuilder: (context, user, index) => ListTile(title: Text(user.name)),
    ),
  ],
)

SliverPaginatedGrid works the same way — just add a gridDelegate.

Controller #

final controller = PaginationController<User>(
  fetchPage: (page) => api.getUsers(page: page),
  config: PaginationConfig(pageSize: 20),  // auto-detects last page
  initialItems: cachedUsers,                // show cached data instantly
);

// Use with widget
PaginationListView<User>.withController(
  controller: controller,
  itemBuilder: (context, user, index) => UserTile(user: user),
)
Method Description
refresh() Reload from first page (items stay visible)
retry() Retry last failed request
reset() Clear everything to initial state
loadNextPage() Manually trigger next page
setTotalItems(n) Set total for "Showing X of Y" + auto-complete
updateItems(fn) Transform items in-place
removeWhere(fn) Remove matching items
insertItem(i, item) Insert at index
removeItemAt(i) Remove at index
updateItemAt(i, item) Replace item at index
Property Type Description
items List<T> All loaded items
currentPage int Current page number
status PaginationStatus Current state
hasMorePages bool More pages available?
state.totalItems int? Total from API (if set)

Customization #

Override any state widget:

PaginationListView<User>(
  fetchPage: (page) => api.getUsers(page: page),
  itemBuilder: (context, user, index) => UserTile(user: user),
  firstPageLoadingBuilder: (context) => MyShimmer(),
  firstPageErrorBuilder: (context, error, retry) => MyErrorWidget(error, retry),
  emptyBuilder: (context) => MyEmptyState(),
  loadMoreLoadingBuilder: (context) => MyLoadingSpinner(),
  loadMoreErrorBuilder: (context, error, retry) => MyRetryBar(error, retry),
  endOfListBuilder: (context) => Text('All caught up!'),
  enablePullToRefresh: true,
  separatorBuilder: (context, index) => Divider(),
)

Configuration #

PaginationConfig #

Param Default Description
initialPage 1 Starting page number
scrollThreshold 200.0 Pixels from bottom to trigger load
autoLoadFirstPage true Auto-load on build
pageSize null Items per page — auto-detects last page

NumberedPaginationConfig #

Param Default Description
buttonSize 40 Page button size
spacing 4 Button spacing
borderRadius 8 Button border radius
showFirstLastButtons true Show ⏮ ⏭ buttons
showNavigationButtons true Show ◀ ▶ buttons
selectedButtonColor primary Active page color

Example #

See the example app for a complete demo with all modes.

License #

MIT — see LICENSE.

4
likes
0
points
111
downloads

Publisher

verified publisheralmasum.dev

Weekly Downloads

Zero-dependency Flutter pagination: infinite scroll, load more button, grid view, slivers, and numbered pagination. Built-in loading/error/empty states, pull-to-refresh, cache-first initialItems, pageSize auto-detection, and totalItems tracking.

Repository (GitHub)
View/report issues

Topics

#pagination #infinite-scroll #lazy-loading #listview #gridview

License

unknown (license)

Dependencies

flutter

More

Packages that depend on flutter_pagination_pro