peng8350/flutter_pulltorefresh
47.8
Weak · 5 August 2026
9.9k
lines of production code
Dart
primary language
4
measurements over time
What this system is
This system is a Flutter library that provides pull-to-refresh and infinite scroll capabilities for list and grid widgets. It offers a core SmartRefresher widget that manages header and footer indicators, supporting various states and custom animations. The library includes a comprehensive set of built-in indicators (Classic, WaterDrop, Bezier, etc.) and allows for fully custom indicators. Additionally, it provides an example application demonstrating diverse usage patterns, including nested scrolls, two-level headers, and internationalization.
How it got here
2018 — SmartRefresher feature expansion and platform migration
14 changes.
The project introduced the core SmartRefresher widget with extensive indicator support and internal refactoring to standardize header and footer rendering. This period also encompassed a significant platform upgrade to Flutter 2.0 with null safety, alongside comprehensive test coverage and internationalization features for the example application.
2019 — comprehensive example library expansion
8 changes.
The project focused on expanding the example application with a wide variety of pull-to-refresh and infinite-scroll usage patterns. New demo pages and activities were added to showcase header and footer indicators, custom animations, and integrations with complex Flutter widgets like StaggeredGrid and ExpansionPanelList.
Features
Add base indicator activity demo
A new demo activity, IndicatorActivity, is added to the example project. It demonstrates the pull-to-refresh and infinite-scroll indicators by wrapping a ListView with SmartRefresher, allowing users to see how header and footer indicators behave during refresh and load-more states.
example/lib/ui/indicator/base · high confidence
Add custom indicator examples for pull-to-refresh
Added new example files demonstrating custom header and footer indicators for the pull-to-refresh component. The changes introduce four new UI examples: a GifHeader/GifFooter using animated GIFs, a ShimmerHeader/ShimmerFooter for loading states, a CustomHeader/CustomFooter using SpinKit animations, and a LinkHeader example that allows the indicator to be linked to other UI elements like an app bar. These files provide templates for implementing non-standard, animated, or linked refresh indicators.
example/lib/ui/example/customindicator · high confidence
Add new custom indicator and layout examples
Added several new example files in the \example/lib/other\ directory to demonstrate custom UI components. These include \RunningHeader\ for a sliding header animation, \custom\_spinkit.dart\ for a fading circle loading indicator, \shimmer\_indicator.dart\ for shimmer-style header and footer indicators, \refresh\_glowindicator.dart\ to customize Android overscroll glow behavior, \expanded\_viewport.dart\ to handle full-height scrolling in nested scroll views, and \refresh\_recordable\_listview.dart\ to combine pull-to-refresh with a reorderable list.
example/lib/other · high confidence
Add new examples for StaggeredGrid, StickyHeader, PageView, and AnimatedList
Added several new example files in the \otherwidget\ directory to demonstrate integrating the pull-to-refresh library with various Flutter widgets. These include a DraggableScrollableSheet with load-more, a Refreshable ExpansionPanelList, a SliverAnimatedList, a vertical PageView, a Recordable ListView, and a StaggeredGrid with StickyHeaders. Each example shows how to wrap the respective widget with SmartRefresher to enable pull-to-refresh and infinite loading behaviors.
example/lib/ui/example/otherwidget · high confidence
Add new indicator implementations: Bezier, Classic, Custom, Link, Material, TwoLevel, and WaterDrop
The \lib/src/indicator\ directory now includes several new indicator implementations to support diverse UI requirements. Developers can now use \BezierHeader\ for a bezier curve effect, \ClassicHeader\/\ClassicFooter\ for a standard text-and-icon layout, \CustomHeader\/\CustomFooter\ for fully custom builder-based indicators, \LinkHeader\/\LinkFooter\ to link indicators outside the viewport, \MaterialClassicHeader\ for a Material Design style, \TwoLevelHeader\ for a two-level pull-to-refresh experience, and \WaterDropHeader\ for a QQ-style water drop animation. These additions expand the library's capabilities for header and footer customization.
lib/src/indicator · high confidence
Added new example UI components for navigation and layout
Added three new UI components to the example application: a reusable \Item\ card widget, a \SecondActivity\ for demonstrating page navigation and header back-button behavior, and a \MainActivity\ implementing a side-menu navigation pattern with tabbed content areas. These files establish the structural foundation for the demo application's interface.
example/lib/ui · high confidence
Adds multi-language support for pull-to-refresh indicators
The example app now supports internationalization for refresh and load-more indicators. The main entry point configures localizations delegates and supported locales (English, Chinese, Japanese, etc.), and the RefreshConfiguration is updated to use these localizations, allowing indicator text to adapt to the user's language setting.
example/lib · high confidence
Expanded example library with new refresh and layout demos
The example application now includes a broader set of usage demonstrations, adding new pages for two-level refresh, QQ chat list simulation, empty view integration, forced full-screen filling, animated list refresh, ExpansionPanelList integration, draggable bottom sheet load more, and StaggeredGrid with sticky headers. These additions provide more comprehensive guidance on how to use the library's features in various UI scenarios.
example/lib/ui/example · high confidence
Expanded set of pull-to-refresh usage examples
Added multiple new example files in the \useStage\ directory to demonstrate various \pull\_to\_refresh\ capabilities, including basic list/GridView usage, nested scroll views with headers, handling empty states, horizontal and reverse scrolling, chat list layouts, button-triggered refreshes, and two-level header interactions.
example/lib/ui/example/useStage · high confidence
Introduce SmartRefresher for pull-to-refresh and infinite scroll
Adds the core SmartRefresher widget, enabling drop-down refresh and up-load infinite scrolling with support for multiple indicator styles (Follow, UnFollow, Behind, Front) and states (idle, refreshing, loading, noMore, etc.). The component wraps scrollable content, manages header and footer indicators, and exposes a RefreshController to programmatically trigger or reset states.
lib/src · high confidence
New indicator demo page with multiple header and footer styles
A new IndicatorPage is added to the example app, providing a grid-based navigation interface to various header and footer indicator demos. The page showcases different header styles including Classic (Follow/UnFollow), QQ/WaterDrop, Material Classic, BezierCircle, and WaterDropMaterial, as well as footer styles with different LoadStyles (ShowAlways, HideAlways, ShowWhenLoading). Each item in the grid navigates to a corresponding activity that demonstrates the specific indicator behavior.
example/lib/ui/indicator · high confidence
Behavioural changes
Android example app renamed to PullRefreshDemo
The Android example application has been renamed from 'demo' to 'PullRefreshDemo'. This change updates the application label in the AndroidManifest.xml and reflects the directory rename from 'demo/android' to 'example/android' across all related files, including the manifest, Java source, and resource files.
example/android · high confidence
Internal refactoring of refresh and load indicators
The library has restructured its internal implementation by introducing new files (\indicator\_wrap.dart\, \refresh\_physics.dart\, \slivers.dart\) to manage the rendering and physics of pull-to-refresh and pull-to-load components. This change introduces a new \RefreshPhysics\ class to handle scroll behaviors and overscroll effects, and defines abstract base classes (\RefreshIndicator\, \LoadIndicator\) and their states to standardize how headers and footers are built and animated. This refactoring supports the library's localization features and provides a more robust foundation for custom indicators.
lib/src/internals · high confidence
Removed obsolete Flutter demo application
The default Flutter demo application (main.dart) has been removed from the demo directory. This eliminates the standard counter app template, streamlining the demo environment by removing unused boilerplate code.
demo · high confidence
Renamed example directory from 'demo' to 'example'
The example directory has been renamed from 'demo' to 'example' across all associated files, including the iOS Runner workspace configuration. This change standardizes the directory naming convention for the project's example application.
example, example/ios/Runner.xcworkspace · high confidence
Renamed library entry point and reorganized exports
The main library entry point has been renamed from flutter\_pulltorefresh.dart to pull\_to\_refresh.dart, and the file structure has been reorganized to explicitly export the new indicator components (classic, waterdrop, custom, link, material, bezier, and twolevel) along with internal refresh physics and localizations, while the old flutter\_pulltorefresh.dart file has been removed.
lib · high confidence
iOS build configuration updated for automatic code signing and framework embedding
The iOS project configuration has been updated to use automatic code signing (Development Team Z598PJ2NUG) and automatic provisioning profiles, replacing manual settings. The build script was changed from 'thin' to 'embed\_and\_thin' to ensure frameworks are properly embedded. Additionally, the bundle identifier was updated from 'com.jpeng.demo' to 'com.jpeng.demo1', and the iOS deployment target was set to 11.2. The project structure was also moved from 'demo/ios' to 'example/ios'.
example/ios/Runner.xcodeproj · high confidence
iOS build configuration updated to include Pods support
The iOS example project's build configuration files (Debug.xcconfig and Release.xcconfig) have been updated to include the generated Pods support files. This change ensures that the iOS build process correctly links against CocoaPods dependencies, resolving potential build errors related to missing pod configurations.
example/ios/Flutter · medium confidence
iOS example app renamed and localized
The iOS example application has been renamed from 'demo' to 'PullRefreshDemo', and the app's supported languages have been updated to include French (fr) and Simplified Chinese (zh\_CN) alongside English, as reflected in the updated Info.plist configuration.
example/ios/Runner · medium confidence
Test coverage
Added UI test examples for pull-to-refresh scenarios; Added comprehensive widget tests for pull-to-refresh and load-more functionality.
Dependencies
Upgrade to Flutter 2.0 and Dart 2.12 (null safety)
The library and its example app have been upgraded to support Flutter 2.0 and Dart 2.12, enabling null safety. The example app's Android configuration has been updated to target SDK 28, and the iOS setup now uses symlinks for Flutter and plugin pods. The example app also includes new dependencies such as http, flutter\_staggered\_grid\_view, and flutter\_swiper, alongside updated asset references.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 48 → 48 (-0.4)
- Rubric changed (rubric-2026.08.17 → rubric-2026.08.19) — scores are not directly comparable.
Lenses
- Code Health 100 → 98 (-2.1)
- Architecture 96 → 94 (-1.6)
- Maturity 34 → 34 (+0.0)
- Readiness 26 → 26 (+0.0)
- Security 100 → 100 (+0.0)
- Domain Modelling 100 → 100 (+0.0)
Resolved (3)
- Dependency hygiene not measured — no supported dependency manifest was read
- The 'example' README is a bare new Flutter project with only the pubspec line and no package-specific usage, leaving readers unable to run the example. (example/README.md)
- The xcassets asset README is a boilerplate file that does not explain how to customize the launch screen for this package. (example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md)
New (4)
- Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
- FileTooLong: src/smart_refresher.dart (lib/src/smart_refresher.dart)
- The 'example' README is a bare 'A new Flutter project.' with only the Getting Started link, offering no real usage or demo beyond the one-line pubspec dependency. (example/README.md)
- The iOS asset README is a boilerplate 'You can customize the launch screen...' directive with no real guidance. (example/ios/Runner/Assets.xcassets/LaunchImage.imageset/README.md)
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
peng8350/flutter_pulltorefresh was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 5 August 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit 0be096c1a822fb03b38115cd76d1bee7e5afdaa2 — the exact code this score is about.
- Scored under rubric-2026.08.19 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer latest.