Simple Ripple Animation Banner

Simple Ripple Animation for Flutter

A lightweight, high-performance, and fully customizable Flutter package for creating smooth circular ripple waves, pulsing avatar glows, radar beacon effects, and call-ringing animations.

Pub Version Pub Points Pub Likes Live Demo License GitHub Stars


๐ŸŒ Live Interactive Playground

Explore the Live Demo to test ripples, customize parameters, and generate Flutter code in real time.


โœจ Features

  • ๐ŸŒŠ Smooth Concentric Ripple Waves: Configurable wave count, minimum radius, maximum radius, and custom duration.
  • ๐ŸŽจ Fully Customizable Aesthetics: Set any ripple color, alpha fade, delay, or repeat mode.
  • โšก High Performance (60 / 120 FPS): Built with Flutter's native CustomPainter and AnimationController for zero lag and silky smooth frame rates.
  • ๐Ÿชถ Zero External Dependencies: Pure Flutter implementation that stays lightweight and fast to compile.
  • ๐Ÿ“ฑ Multiplatform & WASM Ready: Seamlessly runs on Android, iOS, Web (JS & WebAssembly), macOS, Windows, and Linux.
  • ๐Ÿงฉ Plug-and-Play: Wrap around any Flutter widget (CircleAvatar, IconButton, Container, Icon, Text, etc.).
  • ๐Ÿงช 100% Test Coverage: Backed by a comprehensive automated test suite.

๐Ÿ“ธ Preview & Screenshots

Mobile Ripple Animation
Mobile (iOS & Android)
Desktop & Web Ripple Animation
macOS & Web Desktop

๐Ÿš€ Getting Started

1. Installation

Run this command in your Flutter project terminal:

flutter pub add simple_ripple_animation

Or add simple_ripple_animation directly to your pubspec.yaml:

dependencies:
  simple_ripple_animation: ^0.1.1

Then fetch the dependencies:

flutter pub get

2. Import

Import the package in your Dart code:

import 'package:simple_ripple_animation/simple_ripple_animation.dart';

๐Ÿ’ก Usage Examples

Example 1: Basic Ripple Animation

Wrap any widget with RippleAnimation to add an immediate ripple wave effect:

import 'package:flutter/material.dart';
import 'package:simple_ripple_animation/simple_ripple_animation.dart';

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

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: RippleAnimation(
          color: Colors.blue,
          delay: const Duration(milliseconds: 100),
          repeat: true,
          minRadius: 50,
          ripplesCount: 4,
          duration: const Duration(milliseconds: 2000),
          child: const CircleAvatar(
            minRadius: 50,
            maxRadius: 50,
            child: Icon(Icons.person, size: 40),
          ),
        ),
      ),
    );
  }
}

Example 2: Pulsing Avatar with Glowing Waves

Create an eye-catching online status or profile avatar with smooth fading pulses:

RippleAnimation(
  color: Colors.deepOrange,
  delay: const Duration(milliseconds: 300),
  repeat: true,
  minRadius: 75,
  maxRadius: 140,
  ripplesCount: 6,
  duration: const Duration(milliseconds: 1800),
  child: const CircleAvatar(
    minRadius: 75,
    maxRadius: 75,
    backgroundImage: NetworkImage('https://images.unsplash.com/photo-1535713875002-d1d0cf377fde?auto=format&fit=crop&w=300&q=80'),
  ),
)

Example 3: Incoming Phone Call / Voice Assistant Mic Button

Simulate an active voice assistant listener or an incoming call screen:

RippleAnimation(
  color: Colors.green,
  delay: const Duration(milliseconds: 100),
  repeat: true,
  minRadius: 45,
  maxRadius: 110,
  ripplesCount: 4,
  duration: const Duration(milliseconds: 1400),
  child: Container(
    width: 90,
    height: 90,
    decoration: const BoxDecoration(
      shape: BoxShape.circle,
      color: Colors.green,
    ),
    child: const Icon(Icons.phone_in_talk, color: Colors.white, size: 36),
  ),
)

Example 4: Radar / Beacon Ping

Create a radar or location ping effect by customizing wave count and radius:

RippleAnimation(
  color: Colors.cyan,
  delay: const Duration(milliseconds: 250),
  repeat: true,
  minRadius: 30,
  maxRadius: 150,
  ripplesCount: 5,
  duration: const Duration(milliseconds: 2500),
  child: Container(
    width: 60,
    height: 60,
    decoration: BoxDecoration(
      shape: BoxShape.circle,
      color: Colors.cyan.withValues(alpha: 0.2),
      border: Border.all(color: Colors.cyan, width: 2),
    ),
    child: const Icon(Icons.radar, color: Colors.cyan, size: 30),
  ),
)

โš™๏ธ Properties & Parameters Reference

Parameter Type Default Description
child Widget required The center widget around which ripple waves radiate (e.g. CircleAvatar, Icon, Container).
color Color Colors.black The base color of the ripple waves. Opacity automatically fades gracefully outward.
minRadius double 60.0 The starting/inner radius of the ripple animation wave.
maxRadius double 120.0 The outer maximum radius that the ripple expands to before disappearing.
ripplesCount int 5 The number of simultaneous concentric waves visible in the animation.
duration Duration Duration(milliseconds: 2300) The duration of one complete wave cycle.
delay Duration Duration.zero Delay duration before starting the ripple animation.
repeat bool false When true, loops the animation continuously (pulsing effect). When false, plays once.

๐ŸŽฏ Use Cases

  • ๐Ÿ‘ค User Profiles & Avatars: Highlight online presence, VIP members, or active voice participants.
  • ๐Ÿ“ž Calling Screens: Calling, ringing, or receiving indicators for audio/video apps.
  • ๐ŸŽ™๏ธ Voice Assistants & Audio Recorders: Animate while listening, recording, or processing voice input.
  • ๐Ÿ“ Maps & Geolocation: Pulsing GPS position, radar beacon, or selected point of interest.
  • ๐Ÿ”” Alerts & Attention Grabbers: Unread messages, notification bells, and live beacon updates.

๐Ÿ› ๏ธ Platforms Supported

Android iOS Web (WASM & JS) macOS Windows Linux
โœ… โœ… โœ… โœ… โœ… โœ…

๐Ÿค Contributing

Contributions, issues, and feature requests are always welcome!

  1. Fork the Project on GitHub
  2. Create your Feature Branch (git checkout -b feature/AmazingFeature)
  3. Commit your Changes (git commit -m 'Add some AmazingFeature')
  4. Push to the Branch (git push origin feature/AmazingFeature)
  5. Open a Pull Request

๐Ÿ“„ License

This project is licensed under the BSD 3-Clause License - see the LICENSE file for details.


๐Ÿ‘จโ€๐Ÿ’ป Maintainers

Made with โค๏ธ for the Flutter community. If this package helped you, don't forget to give it a โญ on GitHub and a ๐Ÿ‘ on pub.dev!

Libraries

simple_ripple_animation
A simple, customizable ripple animation widget for Flutter applications.