Skip to content
CAI
Software that uses CAICheck a score

Milad-Akarie/smooth_page_indicator

69.5

Adequate · 19 September 2026

2.5k

lines of production code

Dart

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Flutter library that provides customizable page indicator animations for mobile applications. It offers a variety of visual effects, such as worm, slide, and jumping dot transitions, which can be styled using a theme-based configuration system. The library supports right-to-left layouts and allows for detailed customization of dot appearance and animation behavior.

How it got here

2019 — v3.0.0 breaking changes and Flutter 3 upgrade

5 changes.

This period focused on a major version 3.0.0 release that introduced breaking changes to the theming system, converting it to be design-system-agnostic and shifting from ThemeData extensions to InheritedThemes. The library entry point was renamed and the public API was consolidated, while the underlying painting logic was refactored to use effect-driven configuration. These changes were accompanied by an upgrade to Flutter 3.0 and the removal of obsolete test files and legacy indicator classes.

2020–2025 — Theme support and effect expansion

8 changes.

The library introduced global theming via SmoothPageIndicatorTheme and improved RTL layout support, while adding a suite of new animation effects like ColorTransition and ScrollingDots. This period also involved migrating the example app to Flutter v2 embedding and significantly expanding test coverage for both the core library and the demo application.

Features

New and enhanced page indicator animation effects

The library introduces several new dot-indicator animation effects and variants to \lib/src/effects\. New effect classes include \ColorTransitionEffect\ for active-dot color transitions, \CustomizableEffect\ for fully bespoke dot decorations (borders, rotation, vertical offset), \ExpandingDotsEffect\ for scaling the active dot, and \ScrollingDotsEffect\ which supports a fixed-center mode and configurable small-dot scaling. Existing effects have been extended with new variants: \SwapEffect\ now supports \zRotation\ and \yRotation\ types, \WormEffect\ adds \thin\ and \thinUnderground\ variants, and \SlideEffect\ includes a \slideUnder\ variant. Additionally, \JumpingDotEffect\ now exposes \jumpScale\ and \verticalOffset\ customization parameters.

lib/src/effects · high confidence

Behavioural changes

Demo app now showcases multiple indicator effects with customizable styling

The example application has been updated to demonstrate a wider variety of page indicator effects, including Worm, Jumping Dot, Scrolling Dots, and a fully Customizable Effect. Users can now see how to configure specific parameters such as jump scale, vertical offset, stroke width, and dot dimensions, as well as apply custom color overrides and border radiuses to individual dots within the indicator.

example/lib · high confidence

Example iOS project migrated to Flutter v2 embedding and Swift

The iOS example app has been regenerated to use the Flutter v2 embedding, which requires Xcode 11+ and Swift 5. This migration updates the native iOS configuration, including the \AppDelegate\ to implement \FlutterImplicitEngineDelegate\ for plugin registration, and introduces a \FlutterGeneratedPluginSwiftPackage\ for dependency management. The project now uses CocoaPods for dependency resolution and includes updated build schemes and workspace configurations to support the new embedding architecture.

example/ios · high confidence

Introduce theme-based indicator customization and RTL support

The library now supports global theming via a new \SmoothPageIndicatorTheme\ widget, allowing developers to set default effects and colors (\DefaultIndicatorColors\) for all descendant indicators, reducing repetitive configuration. Additionally, right-to-left (RTL) layout support has been improved by replacing the manual \isRTL\ boolean with Flutter's native \TextDirection\ handling, ensuring correct dot ordering in RTL contexts.

lib/src · high confidence

Library entry point restructured and renamed

The main library entry point has been renamed from 'smooth\_indicators' to 'smooth\_page\_indicator'. This change consolidates the public API by exporting specific effect implementations (such as ColorTransition, Scale, Swap, and Worm effects) and the indicator painter, while removing the previous exports for individual indicator types like BouncingDot and SimpleDot.

lib · high confidence

Migration to design-system-agnostic theming and v3.0.0 breaking changes

The package introduces significant breaking changes in version 3.0.0. Default indicator colors are no longer derived from the app's ThemeData; instead, they use hardcoded fallbacks (blue for active, grey for inactive) unless overridden. The \SmoothPageIndicatorTheme\ has been converted from a \ThemeExtension\ to an \InheritedTheme\, meaning it must now wrap the indicator subtree directly rather than being registered in \ThemeData.extensions\. Additionally, the \SmoothIndicator\'s offset parameter now accepts a \ValueListenable\<double\>\ instead of a \double\, and painters receive offset updates via this listenable to optimize repaints. The README and CHANGELOG have been updated to reflect these changes and document the new theming approach.

(repo-wide) · high confidence

Refactored dot painters to use effect-driven configuration and theme colors

The painting logic for page indicator effects (such as ColorTransition, Customizable, JumpingDot, Scale, ScrollingDots, Slide, Swap, and Worm) has been rewritten to derive appearance and behavior from specific Effect objects and a DefaultIndicatorColors theme, replacing the previous approach of passing individual raw parameters (like dotWidth, dotColor, isRTL) directly to painters. This change removes the manual isRTL boolean in favor of Flutter's native Directionality handling, introduces a new CustomizablePainter that supports per-dot decoration and rotation, and adds support for infinite looping and small dot scaling in the ScrollingDots effect. Additionally, the old indicator widget classes (e.g., BouncingDotIndicator, SimpleDotIndicator) have been removed from this location as their painting logic is now encapsulated within these new effect-based painters.

lib/src/painters · high confidence

Test coverage

Added unit and widget tests for page indicator effects; Added unit tests for Smooth Page Indicator diagnostics, rendering, and theming; Added widget smoke test for the example app; Removed empty test file for smooth indicators.

Dependencies

Upgrade to Flutter 3.0 and update dev dependencies

The package now requires the Dart SDK 3.0.0 or higher, aligning with Flutter 3.0. This change updates the development tooling by adding flutter\_lints (v6.0.0) for code analysis, alchemist (v0.14.0) for golden testing, and material\_ui (v1.0.0) for demo assets, while also refreshing transitive dependencies in the lockfile.

(dependencies) · high confidence

Housekeeping

Added example project scaffolding and documentation

The example directory now includes a .gitignore file tailored for Flutter/Dart development, a .metadata file tracking the Flutter SDK revision and channel, and a README.md providing standard getting-started resources. These additions establish the basic project structure and configuration for the example application without altering any functional code.

example · 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

Baseline

  • First survey — no prior run to compare against. CAI 69.

Lenses

  • Code Health 96
  • Architecture 97
  • Maturity 61
  • Readiness 58
  • Security 96
  • Domain Modelling 100

Changes since last survey

  • 90 commits — 80 feature/other, 10 fixes

By area

  • lib/src — 26 commits
  • (root) — 22 commits
  • (repo) — 15 commits
  • test/src — 11 commits
  • .github/workflows — 4 commits
  • coverage/html — 3 commits
  • example/ios — 3 commits
  • example/lib — 2 commits
  • lib/smooth_page_indicator.dart — 2 commits
  • demo/four_sqaures_demo.gif — 1 commit
  • demo/smooth_page_indicator_demo_4.gif — 1 commit

Notable commits

  • fix: - Fix Missing infinite loop support in AnimatedSmoothIndicator #79 - export indicator_painter
  • fix: - Fix Missing infinite loop support in AnimatedSmoothIndicator #79 - export indicator_painter
  • fix: - Fix ignored active dot stroke in ColorTransitionEffect #40 - Fix crash when last item is removed #21 - Add loop support - Add variants to SwapEffect (zRotation, YRotation) - Add variants to WormEffect (thin worm) - Rename [elevation] property from JumpingDotEffect [Breaking] - Add customization params to JumpingDotEffect (jumpScale, verticalOffset) - Add CustomizableEffect
  • fix: - Fix scaleEffect in correct margins - Use flutter_lints - clear up some code
  • fix: Fix README customization example indentation
  • fix: Fix indicator always starts at zero indexes regardless of the controller's initial page.
  • fix: Fix offset mismatch in slide effect
  • fix: Fix: Unsupported operation: Infinity or NaN toInt in ScrollingDotsPainter #97
  • fix: Revert "revise null safety PR"
  • fix: fix README.md file
  • change: - Add Color Transition effect - Replace isRTL with textDirection - Directionality is now handled the flutter way instead of manually passing a bool value to isRTL property
  • change: - Add infinite loop support to SwapEffect - Allow small dot size in ScrollingDotEffect
  • change: - Add more art
  • change: - Optimize size and rotation so they're not calculated on every frame - Add WormEffect variants (WormType.underground,WormType.thinUnderground) - Add SlideEffect variant (SlideType.slideUnder
  • change: Add Active color with transtion to ExpendingDotEffect
  • change: Add AnimatedSmoothIndicator which works without a PageController clean up some old code
  • change: Add OnDotClicked callback Add support for vertical direction Add support for usage without a PageController Clean up some old code
  • change: Add coverage scripts and tests for various effects
  • change: Add golden tests for SwapPainter, JumpingDotPainter, and ScalePainter
  • change: Add off-canvas scrolling effect ScrollingDotsEffect Add Active color with transition to to ScaleEffect update ScrollingDotsEffect demo clean & optimize code
  • …and 70 more

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

Milad-Akarie/smooth_page_indicator 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 19 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit bb6402dd2d94dc8f44ec3f13b580d7148354884e — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-13a154b7f5d1.