import 'package:flutter/material.dart'; import 'package:auto_route/auto_route.dart'; import '../../../common/theme/theme.dart'; @RoutePage() class ComingSoonPage extends StatefulWidget { const ComingSoonPage({super.key}); @override State createState() => _ComingSoonPageState(); } class _ComingSoonPageState extends State with TickerProviderStateMixin { late AnimationController _fadeController; late AnimationController _slideController; late AnimationController _pulseController; late Animation _fadeAnimation; late Animation _slideAnimation; late Animation _pulseAnimation; @override void initState() { super.initState(); // Initialize animation controllers _fadeController = AnimationController( duration: const Duration(milliseconds: 1500), vsync: this, ); _slideController = AnimationController( duration: const Duration(milliseconds: 1200), vsync: this, ); _pulseController = AnimationController( duration: const Duration(milliseconds: 2000), vsync: this, ); // Initialize animations _fadeAnimation = Tween(begin: 0.0, end: 1.0).animate( CurvedAnimation(parent: _fadeController, curve: Curves.easeInOut), ); _slideAnimation = Tween(begin: const Offset(0, 0.5), end: Offset.zero).animate( CurvedAnimation(parent: _slideController, curve: Curves.easeOutCubic), ); _pulseAnimation = Tween(begin: 1.0, end: 1.1).animate( CurvedAnimation(parent: _pulseController, curve: Curves.easeInOut), ); // Start animations _startAnimations(); } void _startAnimations() { _fadeController.forward(); _slideController.forward(); _pulseController.repeat(reverse: true); } @override void dispose() { _fadeController.dispose(); _slideController.dispose(); _pulseController.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Container( width: double.infinity, height: double.infinity, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, colors: [ AppColor.primary, AppColor.primaryLight, AppColor.primaryDark, ], stops: const [0.0, 0.5, 1.0], ), ), child: SafeArea( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 24.0), child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ // Animated Logo/Icon FadeTransition( opacity: _fadeAnimation, child: SlideTransition( position: _slideAnimation, child: _buildAnimatedLogo(), ), ), const SizedBox(height: 40), // Coming Soon Text FadeTransition( opacity: _fadeAnimation, child: SlideTransition( position: _slideAnimation, child: Text( 'Coming Soon', style: AppStyle.h1.copyWith( color: AppColor.textWhite, fontWeight: FontWeight.bold, fontSize: 42, letterSpacing: 2.0, ), textAlign: TextAlign.center, ), ), ), const SizedBox(height: 16), // Subtitle FadeTransition( opacity: _fadeAnimation, child: SlideTransition( position: _slideAnimation, child: Text( 'Something amazing is brewing!\nStay tuned for the big reveal.', style: AppStyle.lg.copyWith( color: AppColor.textWhite.withOpacity(0.9), height: 1.5, ), textAlign: TextAlign.center, ), ), ), ], ), ), ), ), ); } Widget _buildAnimatedLogo() { return AnimatedBuilder( animation: _pulseAnimation, builder: (context, child) { return Transform.scale( scale: _pulseAnimation.value, child: Container( width: 120, height: 120, decoration: BoxDecoration( shape: BoxShape.circle, gradient: LinearGradient( colors: [AppColor.secondary, AppColor.secondaryLight], ), boxShadow: [ BoxShadow( color: AppColor.secondary.withOpacity(0.3), blurRadius: 30, spreadRadius: 5, ), ], ), child: Icon( Icons.rocket_launch, size: 60, color: AppColor.textWhite, ), ), ); }, ); } }