Skip to content
CAI
Software that uses CAICheck a score

peng8350/flutter_pulltorefresh

47.8

Weak · 5 August 2026

9.9k

lines of production code

Dart

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

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

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

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.