multi_nested_circular_progress 0.0.1 copy "multi_nested_circular_progress: ^0.0.1" to clipboard
multi_nested_circular_progress: ^0.0.1 copied to clipboard

A customizable and animated multi-ring circular progress widget for Flutter, ideal for dashboards, stats, analytics, and progress displays.

๐Ÿ“˜ multi_nested_circular_progress #

Preview Animation #

A simple, elegant Flutter package for displaying multiple animated nested circular progress rings, perfect for dashboards, analytics, fitness stats, achievements, level progress, and more.

โœจ Features #

  • ๐ŸŽจ Multiple customizable concentric progress rings
  • ๐Ÿ”„ Smooth animation from 0 โ†’ progress
  • โšก Auto-animates again when values change
  • ๐Ÿงฉ Custom center widget (text, icons, images)
  • ๐Ÿ“ Adjustable stroke width and ring spacing
  • ๐Ÿงต Stateless implementation using TweenAnimationBuilder
  • ๐Ÿ“ฆ Lightweight โ€” zero dependencies
  • โœ” Flutter Web, iOS, Android, and Desktop support

๐Ÿš€ Getting Started #

Add the dependency to your appโ€™s pubspec.yaml:

dependencies:
  multi_nested_circular_progress: ^1.0.0

๐Ÿ“ฆ Basic Usage #

MultiNestedCircularProgress(
  size: 180,
  strokeWidth: 12,
  progresses: [0.8, 0.55, 0.30],
  colors: [
    Colors.amber,
    Colors.pinkAccent,
    Colors.purple,
  ],
  child: Text(
    "80%",
    style: TextStyle(
      fontSize: 26,
      fontWeight: FontWeight.bold,
    ),
  ),
);

๐Ÿงช Example (from the /example app) #

class StatsExample extends StatelessWidget {
  const StatsExample({super.key});

  @override
  Widget build(BuildContext context) {
    final adjustedPlays = 0.75;
    final average = 65;
    final best = 88;

    return Column(
      crossAxisAlignment: CrossAxisAlignment.start,
      children: [
        const Padding(
          padding: EdgeInsets.all(16.0),
          child: Text(
            "Overview",
            style: TextStyle(
              fontSize: 22,
              fontWeight: FontWeight.w700,
            ),
          ),
        ),

        Row(
          children: [
            const SizedBox(width: 16),
            MultiNestedCircularProgress(
              size: 200,
              strokeWidth: 12,
              progresses: [
                adjustedPlays,
                average / 100,
                best / 100,
              ],
              colors: [
                Colors.amber,
                Colors.pinkAccent,
                Colors.purple,
              ],
              child: Text(
                "${(adjustedPlays * 100).toInt()}%",
                style: const TextStyle(
                  fontSize: 24,
                  fontWeight: FontWeight.w700,
                ),
              ),
            ),
          ],
        ),

        const SizedBox(height: 20),
      ],
    );
  }
}

โš™๏ธ API Reference #

MultiNestedCircularProgress #

Parameter Type Description
size double Diameter of the entire widget
progresses List<double> Progress values (0.0 โ†’ 1.0) for each ring
colors List<Color> Color for each ring (same length as progresses)
strokeWidth double Thickness of each ring
gap double Space between rings
child Widget? Widget displayed in the center
durationInMilliSeconds int Animation duration in ms (default: 800ms)

๐ŸŽจ Customization Examples #

Change ring spacing #

gap: 20,

Slow down the animation #

durationInMilliSeconds: 1500,

Replace center text with an icon #

child: Icon(Icons.star, size: 36, color: Colors.amber),

Show only one ring #

progresses: [0.9],
colors: [Colors.green],

๐Ÿงฉ Why Nested Rings? #

This widget is ideal for:

  • Game stats
  • Skill/XP progress
  • Fitness level / daily goals
  • Productivity tracking
  • Achievements overview
  • Dashboard KPIs

Preview #

Nested Progress Preview

๐Ÿค Contributing #

Contributions are welcome! Please open a pull request to the main branch.

๐Ÿชช License #

multi_nested_circular_progress is MIT-licensed. See the LICENCE file for details.

โญ๏ธ Support the Package #

If you find this widget useful, please give it a โญ on GitHub!

1
likes
160
points
7
downloads

Documentation

API reference

Publisher

unverified uploader

Weekly Downloads

A customizable and animated multi-ring circular progress widget for Flutter, ideal for dashboards, stats, analytics, and progress displays.

Repository (GitHub)
View/report issues

License

MIT (license)

Dependencies

flutter

More

Packages that depend on multi_nested_circular_progress