import 'package:flutter/material.dart'; import '../theme/app_colors.dart'; import '../theme/app_spacing.dart'; class ShimmerLoading extends StatefulWidget { final double width; final double height; final double borderRadius; const ShimmerLoading({ super.key, this.width = double.infinity, this.height = 200, this.borderRadius = AppSpacing.radiusMedium, }); @override State createState() => _ShimmerLoadingState(); } class _ShimmerLoadingState extends State with SingleTickerProviderStateMixin { late AnimationController _controller; late Animation _animation; @override void initState() { super.initState(); _controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 1500), )..repeat(); _animation = Tween( begin: -1.0, end: 2.0, ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeInOut)); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return AnimatedBuilder( animation: _animation, builder: (context, child) { return Container( width: widget.width, height: widget.height, decoration: BoxDecoration( borderRadius: BorderRadius.circular(widget.borderRadius), gradient: LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: const [ AppColors.surfaceVariant, AppColors.surface, AppColors.surfaceVariant, ], stops: [ _animation.value - 0.3, _animation.value, _animation.value + 0.3, ], ), ), ); }, ); } }