pagy 1.0.0
pagy: ^1.0.0 copied to clipboard
A Flutter package for easy pagination with API data fetching, customizable UI, shimmer effects, error handling, and smooth scrolling.
Pagy - A simple Flutter package for smooth pagination
🚀 Pagy - A Flutter Package for Pagination #
Pagy is a plug-and-play pagination solution for Flutter apps. It handles:
- API pagination (query params, body payloads, headers).
- Auto-cancel of duplicate API calls.
- Global styles (placeholders, shimmer, spacing).
- API interceptors (for auth tokens, retries, etc.).
- Logging and monitoring.
- Easy integration with Bloc, Riverpod, or direct controllers.
- Works with both light and dark themes automatically.
- Clean Architecture friendly – can be injected into repositories/services.
Usage #
Example: Paginating Property Data #
Here’s an example of how you can use Pagy in your project to paginate through property data from an API:
import 'package:flutter/material.dart';
import 'package:pagy/pagy.dart';
import 'views/nav_screen.dart';
void main() {
PagyConfig().initialize(
baseUrl: "Your API Base URL",
pageKey: 'page',
limitKey: 'limit',
);
runApp(const PagyExampleApp());
}
📄 Basic ListView Example #
import 'package:flutter/material.dart';
import 'package:pagy/pagy.dart';
import '../models/property_model.dart';
import '../widgets/property_card_widget.dart';
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
late PagyController<PropertyModel> pagyController;
@override
void initState() {
super.initState();
pagyController = PagyController(
endPoint: "properties",
requestType: PagyApiRequestType.post,
fromMap: PropertyModel.fromJson,
limit: 4,
responseMapper: (response) {
return PagyResponseParser(
list: response['data'],
totalPages: response['pagination']['totalPages'],
);
},
paginationMode: PaginationPayloadMode.queryParams,
);
pagyController.loadData();
}
@override
Widget build(BuildContext context) {
return PagyListView<PropertyModel>(
itemSpacing: 10,
padding: const EdgeInsets.symmetric(horizontal: 14),
// separatorBuilder: (context, index) => const Divider(),
controller: pagyController,
placeholderItemCount: 10,
shimmerEffect: true,
placeholderItemModel: PropertyModel(),
itemBuilder: (context, item) {
return PropertyCardWidget(data: item);
},
);
}
}