pullex 1.0.4
pullex: ^1.0.4 copied to clipboard
A customizable pull-to-refresh widget for Flutter, based on pull_to_refresh with enhancements and bugfixes.
Pullex 🚀 #
A modern, flexible and production-ready Pull-To-Refresh & Load-More widget for Flutter.
Forked from flutter_pulltorefresh — rewritten and modernized for Flutter 3 & Dart 3 with improved architecture, localization, and full null-safety.
✨ What's New in 1.0.4 #
- Improved localization and translations
- Renamed
PullexRefreshController→RefreshController - Fixed all static analysis warnings (
lintscompliant) - Achieved 100% pub.dev score
- Minor documentation and code cleanup
🔁 Migration from PullexRefreshController → RefreshController #
⚠️ Starting from v1.0.1, the old class name PullexRefreshController has been renamed to RefreshController
❌ Before #
final controller = PullexRefreshController();
✅ After #
final controller = RefreshController();
💡 Tip: You only need to rename the class in your imports — no API behavior has changed.
⚙️ Features #
- ✅ Modern architecture — Flutter 3.x & Dart 3 compatible
- ✅ Ready-to-use headers:
BaseHeaderCustomHeaderMaterialClassicHeaderWaterDropHeaderStretchCircleHeaderTwoLevelHeader
- ✅ Custom Footer support
- ✅ LinkHeader / LinkFooter proxy support
- ✅ Fully customizable and easy to integrate
- ✅ 12 built-in localizations
- ✅ Zero dependencies (pure Dart)
- ✅ Production-ready — used in live apps
📦 Installation #
Add to your pubspec.yaml:
dependencies:
pullex: ^1.0.4
🧩 Basic Usage #
import 'package:pullex/pullex.dart';
final controller = RefreshController();
SmartRefresher(
controller: controller,
enablePullDown: true,
enablePullUp: true,
header: const MaterialClassicHeader(),
onRefresh: () async {
// your refresh logic
controller.refreshCompleted();
},
onLoading: () async {
// your load more logic
controller.loadComplete();
},
child: ListView.builder(
itemCount: 30,
itemBuilder: (_, i) => ListTile(title: Text('Item $i')),
),
);
🖼️ Examples #
| Base Header | Custom Header | Load More Base Header | Material Header |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| Stretch Circle Header | Two Level Refresh | Water Drop Header | |
|---|---|---|---|
![]() |
![]() |
![]() |
🌍 Localization #
Pullex supports 12 languages out of the box:
| Language | Code |
|---|---|
| English | en |
| Chinese | zh |
| French | fr |
| Ukrainian | uk |
| Italian | it |
| Japanese | ja |
| German | de |
| Spanish | es |
| Dutch | nl |
| Swedish | sv |
| Portuguese (Brazil) | pt |
| Korean | ko |
Setup localization: #
MaterialApp(
localizationsDelegates: [
RefreshLocalizations.delegate,
GlobalMaterialLocalizations.delegate,
GlobalWidgetsLocalizations.delegate,
GlobalCupertinoLocalizations.delegate,
],
supportedLocales: [
const Locale('en'),
const Locale('uk'),
const Locale('fr'),
const Locale('de'),
const Locale('es'),
const Locale('pt'),
const Locale('it'),
const Locale('nl'),
const Locale('sv'),
const Locale('ko'),
const Locale('ja'),
const Locale('zh'),
],
)
🚚 Migration from flutter_pulltorefresh #
Pullex is a modernized fork of flutter_pulltorefresh, fully compatible with Flutter 3:
- Cleaner and safer public API
- Updated internal scroll physics
- Improved headers and footers
- Built-in localization
- Actively maintained
📌 Example Project #
You can find a complete example in:
example/lib/ui/
Each header type has a dedicated example:
ui/base_header/base_header_example.dart
ui/custom_header/custom_header_example.dart
ui/load_more_base_header/load_more_base_header_example.dart
ui/material_header/material_header_example.dart
ui/stretch_header/stretch_header_example.dart
ui/two_level_refresh/two_level_refresh_example.dart
ui/water_drop_header/water_drop_header_example.dart
Run:
flutter run -d your_device
❤️ Contributing #
Contributions are welcome!
Feel free to open issues or submit PRs to improve Pullex.
📜 License #
MIT License — based on flutter_pulltorefresh
by Jpeng
Pullex — built for modern Flutter 🚀
Crafted with ❤️ by Drivecode Team






