easy_scroll_pagination 1.1.0 copy "easy_scroll_pagination: ^1.1.0" to clipboard
easy_scroll_pagination: ^1.1.0 copied to clipboard

A flexible Flutter pagination controller supporting offset and cursor-based pagination with refresh, parallel API calls, and clean state management.

example/lib/main.dart

import 'dart:async';

import 'package:easy_scroll_pagination/easy_scroll_pagination.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(const ExampleApp());
}

class ExampleApp extends StatelessWidget {
  const ExampleApp({super.key});

  @override
  Widget build(BuildContext context) {
    return MaterialApp(title: 'Smart Pagination Example', theme: ThemeData(useMaterial3: true), home: const UsersPage());
  }
}

class UsersPage extends StatefulWidget {
  const UsersPage({super.key});

  @override
  State<UsersPage> createState() => _UsersPageState();
}

class _UsersPageState extends State<UsersPage> {
  late final OffsetPaginationController<User> _controller;

  @override
  void initState() {
    super.initState();
    _controller = OffsetPaginationController<User>(fetcher: _fetchUsers, limit: 20);
  }

  Future<List<User>> _fetchUsers(int page, int limit) async {
    await Future<void>.delayed(const Duration(milliseconds: 600));
    final start = (page - 1) * limit;

    if (page > 5) return [];

    return List.generate(limit, (index) => User(id: start + index + 1, name: 'User ${start + index + 1}'));
  }

  @override
  void dispose() {
    _controller.dispose();
    super.dispose();
  }

  @override
  Widget build(BuildContext context) {
    return DefaultTabController(
      length: 4,
      child: Scaffold(
        appBar: AppBar(
          title: const Text('Smart Pagination Example'),
          bottom: const TabBar(
            isScrollable: true,
            tabs: [
              Tab(text: 'List'),
              Tab(text: 'Grid'),
              Tab(text: 'Page'),
              Tab(text: 'Column'),
            ],
          ),
        ),
        body: TabBarView(children: [_buildListView(), _buildGridView(), _buildPageView(), _buildColumnView()]),
      ),
    );
  }

  Widget _buildListView() {
    return PaginatedView<User>.list(
      controller: _controller,
      itemBuilder: (context, user, index) => ListTile(
        leading: CircleAvatar(child: Text(user.id.toString())),
        title: Text(user.name),
      ),
    );
  }

  Widget _buildGridView() {
    return PaginatedView<User>.grid(
      controller: _controller,
      gridDelegate: const SliverGridDelegateWithFixedCrossAxisCount(crossAxisCount: 2, childAspectRatio: 2),
      itemBuilder: (context, user, index) => Card(child: Center(child: Text(user.name))),
    );
  }

  Widget _buildPageView() {
    return PaginatedView<User>.page(
      controller: _controller,
      itemBuilder: (context, user, index) => Center(child: Text(user.name, style: Theme.of(context).textTheme.headlineMedium)),
    );
  }

  Widget _buildColumnView() {
    final scrollController = ScrollController();
    return SingleChildScrollView(
      controller: scrollController,
      child: PaginatedView<User>.layout(
        controller: _controller,
        scrollController: scrollController,
        itemBuilder: (context, user, index) => ListTile(title: Text(user.name), subtitle: Text('Index: $index')),
        layoutBuilder: (children) => Column(children: children),
      ),
    );
  }
}

class User {
  final int id;
  final String name;

  User({required this.id, required this.name});
}
2
likes
160
points
71
downloads

Publisher

unverified uploader

Weekly Downloads

A flexible Flutter pagination controller supporting offset and cursor-based pagination with refresh, parallel API calls, and clean state management.

Repository (GitHub)
View/report issues

Documentation

API reference

License

MIT (license)

Dependencies

cupertino_icons, flutter

More

Packages that depend on easy_scroll_pagination