How to Add Wave Animation in Flutter
Wave animation is a popular effect used in mobile apps and web pages. It gives an illusion of movement and can be used to convey a sense of excitement or energy. In this article, we will show you how to create a wave animation in Flutter.
The animation is interesting to use in a Flutter app. It’s the foundation for a liquid motion.
WaveContainer( width: double.infinity, height: 50, waveColor: Colors.orangeAccent)
class WaveContainer extends StatefulWidget { final Duration duration; final double height; final double width; final Color waveColor; const WaveContainer({ Key key, this.duration, @required this.height, @required this.width, this.waveColor, }) : super(key: key); @override _WaveContainerState createState() => _WaveContainerState(); } class _WaveContainerState extends State<WaveContainer> with TickerProviderStateMixin { AnimationController _animationController; Duration _duration; Color _waveColor; @override void initState() { super.initState(); _duration = widget.duration ?? const Duration(milliseconds: 1000); _animationController = AnimationController(vsync: this, duration: _duration); _waveColor = widget.waveColor ?? Colors.lightBlueAccent; _animationController.repeat(); } @override Widget build(BuildContext context) { return Container( width: widget.width, height: widget.height, child: AnimatedBuilder( animation: _animationController, builder: (BuildContext context, Widget child) { return CustomPaint( painter: WavePainter( waveAnimation: _animationController, waveColor: _waveColor), ); }, ), ); } @override void dispose() { _animationController?.stop(); _animationController?.dispose(); super.dispose(); } } class WavePainter extends CustomPainter { Animation<double> waveAnimation; Color waveColor; WavePainter({this.waveAnimation, this.waveColor}); @override void paint(Canvas canvas, Size size) { Path path = Path(); for (double i = 0.0; i < size.width; i++) { path.lineTo(i, sin((i / size.width * 2 * pi) + (waveAnimation.value * 2 * pi)) * 4); } path.lineTo(size.width, size.height); path.lineTo(0.0, size.height); path.close(); Paint wavePaint = Paint()..color = waveColor; canvas.drawPath(path, wavePaint); } @override bool shouldRepaint(CustomPainter oldDelegate) { return true; } }