update ios project
update ios project
This commit is contained in:
@@ -0,0 +1,90 @@
|
||||
import 'dart:math';
|
||||
|
||||
import 'package:flutter/material.dart';
|
||||
|
||||
///
|
||||
/// desc:
|
||||
///
|
||||
class WaterRipple extends StatefulWidget {
|
||||
final Color color;
|
||||
final Duration duration;
|
||||
final Curve curve;
|
||||
final int count;
|
||||
|
||||
const WaterRipple(
|
||||
{Key? key,
|
||||
this.color = Colors.white,
|
||||
this.count = 3,
|
||||
this.duration = const Duration(milliseconds: 800),
|
||||
this.curve = Curves.linear})
|
||||
: super(key: key);
|
||||
|
||||
@override
|
||||
_WaterRippleState createState() => _WaterRippleState();
|
||||
}
|
||||
|
||||
class _WaterRippleState extends State<WaterRipple>
|
||||
with SingleTickerProviderStateMixin {
|
||||
late AnimationController _controller;
|
||||
late Animation _animation;
|
||||
|
||||
@override
|
||||
void initState() {
|
||||
_controller = AnimationController(vsync: this, duration: widget.duration)
|
||||
..repeat();
|
||||
_animation = CurveTween(curve: widget.curve).animate(_controller);
|
||||
|
||||
super.initState();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_controller.dispose();
|
||||
super.dispose();
|
||||
}
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return AnimatedBuilder(
|
||||
animation: _controller,
|
||||
builder: (context, child) {
|
||||
return CustomPaint(
|
||||
painter: WaterRipplePainter(_animation.value,
|
||||
count: widget.count, color: widget.color),
|
||||
);
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
class WaterRipplePainter extends CustomPainter {
|
||||
final double progress;
|
||||
final int count;
|
||||
final Color color;
|
||||
|
||||
Paint _paint = Paint()..style = PaintingStyle.fill;
|
||||
|
||||
WaterRipplePainter(this.progress,
|
||||
{this.count = 3, this.color = const Color(0xFF0080ff)});
|
||||
|
||||
@override
|
||||
void paint(Canvas canvas, Size size) {
|
||||
double radius = min(size.width / 2, size.height / 2);
|
||||
|
||||
for (int i = count; i >= 0; i--) {
|
||||
final double opacity = (1.0 - ((i + progress) / (count + 1)));
|
||||
final Color _color = color.withOpacity(opacity);
|
||||
_paint..color = _color;
|
||||
|
||||
double _radius = radius * ((i + progress) / (count + 1));
|
||||
|
||||
canvas.drawCircle(
|
||||
Offset(size.width / 2, size.height / 2), _radius, _paint);
|
||||
}
|
||||
}
|
||||
|
||||
@override
|
||||
bool shouldRepaint(covariant WaterRipplePainter old) {
|
||||
return progress != old.progress || color != old.color || count != old.count;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user