Files

74 lines
1.9 KiB
Dart

import 'package:flutter/material.dart';
import '../theme/app_theme.dart';
/// Smooth Shimmer Loading Skeleton Effect Widget.
class ShimmerLoading extends StatefulWidget {
final double width;
final double height;
final double? borderRadius;
const ShimmerLoading({
super.key,
required this.width,
required this.height,
this.borderRadius,
});
@override
State<ShimmerLoading> createState() => _ShimmerLoadingState();
}
class _ShimmerLoadingState extends State<ShimmerLoading> with SingleTickerProviderStateMixin {
late AnimationController _controller;
@override
void initState() {
super.initState();
_controller = AnimationController(
vsync: this,
duration: const Duration(milliseconds: 1200),
)..repeat();
}
@override
void dispose() {
_controller.dispose();
super.dispose();
}
@override
Widget build(BuildContext context) {
final activeTheme = AppTheme.activePreset;
final radius = widget.borderRadius ?? activeTheme.borderRadius;
final baseColor = activeTheme.glassSurface;
final highlightColor = activeTheme.glassBorder.withValues(alpha: 0.5);
return AnimatedBuilder(
animation: _controller,
builder: (context, child) {
return Container(
width: widget.width,
height: widget.height,
decoration: BoxDecoration(
borderRadius: BorderRadius.circular(radius),
gradient: LinearGradient(
begin: Alignment.centerLeft,
end: Alignment.centerRight,
colors: [
baseColor,
highlightColor,
baseColor,
],
stops: [
(_controller.value - 0.3).clamp(0.0, 1.0),
_controller.value,
(_controller.value + 0.3).clamp(0.0, 1.0),
],
),
),
);
},
);
}
}