import 'package:flutter/animation.dart'; import 'package:flutter/material.dart'; import 'package:test_sa/extensions/int_extensions.dart'; import 'package:test_sa/new_views/app_style/app_color.dart'; class CircularAnimatedContainer extends StatefulWidget { Widget child; CircularAnimatedContainer({Key? key, required this.child}) : super(key: key); @override _CircularAnimatedContainerState createState() => _CircularAnimatedContainerState(); } class _CircularAnimatedContainerState extends State with SingleTickerProviderStateMixin { AnimationController ?_controller; Animation? _animation; @override void initState() { super.initState(); _controller = AnimationController( duration: const Duration(seconds: 2), vsync: this, )..repeat(); _animation = CurvedAnimation( parent: _controller!, curve: Curves.easeInOut, // Applies the ease-in-out effect ); // Repeats animation } @override void dispose() { _controller!.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Center( child: Stack( alignment: Alignment.center, children: [ widget.child, AnimatedBuilder( animation: _animation!, builder: (context, child) { return CustomPaint( painter: CircularProgressPainter( progress: _animation!.value), size: Size(100.toScreenHeight, 100.toScreenWidth), ); }, ), ], ), ); } } class CircularProgressPainter extends CustomPainter { final double progress; CircularProgressPainter({ required this.progress}); @override void paint(Canvas canvas, Size size) { final Paint paint = Paint() ..color = AppColor.primary10 ..style = PaintingStyle.stroke ..strokeWidth = 3 ..strokeCap = StrokeCap.round; final center = Offset(size.width / 2, size.height / 2); final radius = size.width / 2.05; final double startAngle = 2.5 * 3.141592653589793 * progress; final double sweepAngle = 2 * 3.141592653589793 * progress; // const double startAngle = -90 * (3.141592653589793 / 180); // final double sweepAngle = 2.05 * 3.141592653589793 * progress; canvas.drawArc( Rect.fromCircle(center: center, radius: radius), startAngle, sweepAngle, false, paint, ); } @override bool shouldRepaint(covariant CustomPainter oldDelegate) { return true; } }