A highly customizable Flutter widget for creating animated ripple effects using custom painting. Perfect for creating engaging visual effects in your Flutter applications, from loading indicators to interactive backgrounds and more.
- 🎨 Fully customizable ripple appearance
- 🎯 Custom positioning with alignment control
- 📐 Flexible sizing options
- 🔄 Configurable animation duration
- 🌊 Adjustable number of waves
- ✂️ Optional bounds clipping
- 🎭 Support for overlay widgets
- ✨ Smooth, endless animation
- 🎮 Perfect for various use cases (backgrounds, loading indicators, buttons, etc.)
import 'package:flutter_ripple_painter/flutter_ripple_painter.dart';
RipplePainter(
waveColor: Colors.blue,
child: Text('Center Content'),
)
RipplePainter(
numberOfWaves: 4,
animationDuration: const Duration(seconds: 6),
waveColor: Colors.purple,
strokeWidth: 3.0,
maxRadiusPercent: 0.8,
baseOpacity: 0.3,
alignment: Alignment.topCenter,
clipToBounds: false,
size: Size(200, 200),
child: Icon(Icons.favorite),
)
RipplePainter(
size: Size(100, 100),
numberOfWaves: 2,
waveColor: Colors.blue,
animationDuration: Duration(seconds: 4),
)
Material(
child: InkWell(
onTap: () {},
child: RipplePainter(
size: Size(200, 50),
waveColor: Colors.purple.withOpacity(0.5),
child: Center(child: Text('Tap Me')),
),
),
)
Stack(
children: [
RipplePainter(
alignment: Alignment.topRight,
clipToBounds: false,
waveColor: Colors.red,
),
YourContent(),
],
)
Parameter | Type | Default | Description |
---|---|---|---|
numberOfWaves | int | 3 | Number of concurrent ripple waves |
animationDuration | Duration | 8 seconds | Duration of one complete ripple cycle |
waveColor | Color | Colors.white | Color of the ripple waves |
strokeWidth | double | 2.0 | Stroke width of the ripple circles |
maxRadiusPercent | double | 0.9 | Maximum radius relative to container width |
baseOpacity | double | 0.2 | Base opacity of the waves |
alignment | Alignment? | center | Position of the ripple center |
clipToBounds | bool | true | Whether to clip ripples to container bounds |
size | Size? | null | Fixed size for the ripple container |
child | Widget? | null | Optional overlay widget |
The package uses CustomPainter
to create smooth, efficient ripple animations. The painting is optimized for performance and memory usage, making it suitable for various use cases from small indicators to full-screen effects.
Originally inspired by a splash screen animation, Generated README via Claude (Anthropic).