drift_pagination 1.0.2 copy "drift_pagination: ^1.0.2" to clipboard
drift_pagination: ^1.0.2 copied to clipboard

A Dart package that provides simple and efficient pagination utilities for Drift, the reactive persistence library for Flutter applications.

Drift Pagination #

A Dart package that provides simple and efficient pagination utilities for Drift, the reactive persistence library for Flutter applications.

Features #

  • Simple, immutable Pagination and Page<T> classes for paginated queries.
  • Extensions for easy pagination on Drift Selectable queries.
  • Works with both simple selects and joined queries.
  • Provides total count, page info, and navigation helpers.

Installation #

Add to your pubspec.yaml:

dependencies:
  drift_pagination: ^1.0.2

Usage #

1. Define your tables #

import 'package:drift/drift.dart';

class Categories extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get name => text()();
}

class TodoItems extends Table {
  IntColumn get id => integer().autoIncrement()();
  TextColumn get title => text()();
  IntColumn get category => integer().references(Categories, #id)();
  DateTimeColumn get createdAt => dateTime().nullable()();
}

2. Use pagination in your queries #

import 'package:drift/drift.dart';
import 'package:drift_pagination/drift_pagination.dart';

// Example: Paginate categories
Future<Page<Category>> selectCategories({
  Pagination pagination = const Pagination.defaults(),
}) => select(categories).paginate(pagination).get();

// Example: Paginate joined todo items by category
Future<Page<TodoItem>> selectTodoItems(int categoryId, {
  Pagination pagination = const Pagination.defaults(),
}) =>
  (select(todoItems).join([
    innerJoin(categories, categories.id.equalsExp(todoItems.category)),
  ])..where(categories.id.equals(categoryId)))
    .paginate((row) => row.readTable(todoItems), pagination)
    .get();

3. Page Object #

  • Page<T> is an immutable object that extends List<T>.
  • The List<T> items inside the Page<T> cannot grow or be modified.
  • All methods that Page<T> extends are applied to items.

4. Example: Infinite ListView #

final page = await database.selectCategories(pagination: Pagination(page: 1, limit: 20));

List<Category> items = page.items;
bool lastPage = page.lastPage;

// To load more:
final nextPage = await database.selectCategories(pagination: page.next);
items = [...items, ...nextPage.items];

Example Project #

See the example/ directory for a full Flutter app demonstrating infinite scrolling with categories and todo items.

API Reference #

  • Pagination - Holds page, limit, skip, and provides navigation helpers.
  • Page<T> - Immutable, implements List<T>, and provides pagination info.
  • Extensions: .paginate() on Drift select statements.

License #

This project uses BSD-3-Clause as license.

1
likes
150
points
31
downloads

Publisher

unverified uploader

Weekly Downloads

A Dart package that provides simple and efficient pagination utilities for Drift, the reactive persistence library for Flutter applications.

Repository (GitHub)
View/report issues

Documentation

API reference

License

BSD-3-Clause (license)

Dependencies

drift

More

Packages that depend on drift_pagination