How to Create a Wave Animation in Flutter
•2 min read
A wave animation can be implemented in Flutter using CustomPainter
and AnimationController
to create a dynamic, flowing effect.
Example
import 'package:flutter/material.dart'; import 'dart:math'; class WaveAnimation extends StatefulWidget { @override _WaveAnimationState createState() => _WaveAnimationState(); } class _WaveAnimationState extends State<WaveAnimation> with SingleTickerProviderStateMixin { late AnimationController _controller; @override void initState() { super.initState(); _controller = AnimationController( vsync: this, duration: Duration(seconds: 2), )..repeat(); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return CustomPaint( size: Size(double.infinity, 200), painter: WavePainter(_controller), ); } } class WavePainter extends CustomPainter { final Animation<double> animation; WavePainter(this.animation) : super(repaint: animation); @override void paint(Canvas canvas, Size size) { final paint = Paint() ..color = Colors.blue ..style = PaintingStyle.fill; final path = Path(); final waveHeight = 20.0; final waveLength = size.width / 2; path.moveTo(0, size.height / 2); for (double x = 0; x <= size.width; x++) { final y = size.height / 2 + waveHeight * sin((2 * pi * x / waveLength) + (2 * pi * animation.value)); path.lineTo(x, y); } path.lineTo(size.width, size.height); path.lineTo(0, size.height); path.close(); canvas.drawPath(path, paint); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) => true; } void main() { runApp(MaterialApp( home: Scaffold( body: Center( child: WaveAnimation(), ), ), )); }
By using CustomPainter
and AnimationController
, you can create a smooth wave animation in Flutter.