import 'package:flutter/material.dart'; import 'package:lba/res/colors.dart'; class ThemeTransitionOverlay extends StatefulWidget { final Widget child; final bool isTransitioning; final bool isDarkMode; const ThemeTransitionOverlay({ super.key, required this.child, required this.isTransitioning, required this.isDarkMode, }); @override State createState() => _ThemeTransitionOverlayState(); } class _ThemeTransitionOverlayState extends State with TickerProviderStateMixin { late AnimationController _controller; late Animation _scaleAnimation; late Animation _fadeAnimation; @override void initState() { super.initState(); _controller = AnimationController( duration: const Duration(milliseconds: 800), vsync: this, ); _scaleAnimation = Tween( begin: 0.0, end: 3.0, ).animate(CurvedAnimation( parent: _controller, curve: const Interval(0.0, 0.7, curve: Curves.easeOutCubic), )); _fadeAnimation = Tween( begin: 1.0, end: 0.0, ).animate(CurvedAnimation( parent: _controller, curve: const Interval(0.6, 1.0, curve: Curves.easeInCubic), )); } @override void didUpdateWidget(ThemeTransitionOverlay oldWidget) { super.didUpdateWidget(oldWidget); if (widget.isTransitioning && !oldWidget.isTransitioning) { _controller.forward().then((_) { _controller.reset(); }); } } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Stack( children: [ widget.child, if (widget.isTransitioning) AnimatedBuilder( animation: _controller, builder: (context, child) { return Positioned.fill( child: Container( color: Colors.transparent, child: Center( child: Transform.scale( scale: _scaleAnimation.value, child: Opacity( opacity: _fadeAnimation.value, child: Container( width: 100, height: 100, decoration: BoxDecoration( shape: BoxShape.circle, gradient: RadialGradient( colors: widget.isDarkMode ? [ DarkAppColors.scaffoldBackground, DarkAppColors.surface, DarkAppColors.primary, ] : [ LightAppColors.scaffoldBackground, LightAppColors.surface, LightAppColors.primary, ], stops: const [0.3, 0.7, 1.0], ), boxShadow: [ BoxShadow( color: (widget.isDarkMode ? DarkAppColors.primary : LightAppColors.primary) .withOpacity(0.3), blurRadius: 30, spreadRadius: 10, ), ], ), ), ), ), ), ), ); }, ), ], ); } }