import 'package:flutter/material.dart'; import '../theme/app_theme.dart'; import 'login_screen.dart'; import 'register_screen.dart'; class SplashScreen extends StatefulWidget { const SplashScreen({super.key}); @override State createState() => _SplashScreenState(); } class _SplashScreenState extends State with SingleTickerProviderStateMixin { late AnimationController _controller; late Animation _fadeIn; late Animation _slideUp; @override void initState() { super.initState(); _controller = AnimationController( vsync: this, duration: const Duration(milliseconds: 900), ); _fadeIn = Tween(begin: 0, end: 1).animate( CurvedAnimation(parent: _controller, curve: Curves.easeOut), ); _slideUp = Tween( begin: const Offset(0, 0.3), end: Offset.zero, ).animate(CurvedAnimation(parent: _controller, curve: Curves.easeOut)); _controller.forward(); } @override void dispose() { _controller.dispose(); super.dispose(); } @override Widget build(BuildContext context) { return Scaffold( body: Container( width: double.infinity, height: double.infinity, decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topCenter, end: Alignment.bottomCenter, colors: [AppTheme.primary, AppTheme.primaryDark], ), ), child: SafeArea( child: Padding( padding: const EdgeInsets.symmetric(horizontal: 28), child: Column( children: [ const Spacer(flex: 2), // ── Ícono de la app ───────────────────────────────────── FadeTransition( opacity: _fadeIn, child: Container( width: 90, height: 90, decoration: BoxDecoration( color: Colors.white.withOpacity(0.15), borderRadius: BorderRadius.circular(AppTheme.radiusXl), ), child: const Icon( Icons.delete_outline_rounded, size: 46, color: Colors.white, ), ), ), const SizedBox(height: 24), // ── Nombre y descripción ──────────────────────────────── SlideTransition( position: _slideUp, child: FadeTransition( opacity: _fadeIn, child: Column( children: [ const Text( 'RutaVerde', style: TextStyle( fontSize: 32, fontWeight: FontWeight.w700, color: Colors.white, letterSpacing: -0.5, ), ), const SizedBox(height: 10), Text( 'Sigue en tiempo real el camión de basura\ny recibe alertas cuando esté cerca.', textAlign: TextAlign.center, style: TextStyle( fontSize: 15, color: Colors.white.withOpacity(0.82), height: 1.5, ), ), ], ), ), ), const Spacer(flex: 3), // ── Características rápidas ───────────────────────────── FadeTransition( opacity: _fadeIn, child: Row( mainAxisAlignment: MainAxisAlignment.spaceEvenly, children: [ _FeatureChip( icon: Icons.location_on_outlined, label: 'Rastreo en vivo', ), _FeatureChip( icon: Icons.notifications_outlined, label: 'Alertas', ), _FeatureChip( icon: Icons.home_outlined, label: 'Tu dirección', ), ], ), ), const SizedBox(height: 40), // ── Botones ───────────────────────────────────────────── FadeTransition( opacity: _fadeIn, child: Column( children: [ ElevatedButton( style: ElevatedButton.styleFrom( backgroundColor: Colors.white, foregroundColor: AppTheme.primaryDark, minimumSize: const Size(double.infinity, 52), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(AppTheme.radiusMd), ), textStyle: const TextStyle( fontSize: 15, fontWeight: FontWeight.w600, ), ), onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (_) => const RegisterScreen(), ), ); }, child: const Text('Crear cuenta'), ), const SizedBox(height: 12), OutlinedButton( onPressed: () { Navigator.push( context, MaterialPageRoute( builder: (_) => const LoginScreen(), ), ); }, child: const Text('Ya tengo cuenta'), ), ], ), ), const SizedBox(height: 24), Text( 'Servicio de Limpia · Celaya, Gto.', style: TextStyle( fontSize: 12, color: Colors.white.withOpacity(0.45), ), ), const SizedBox(height: 16), ], ), ), ), ), ); } } class _FeatureChip extends StatelessWidget { final IconData icon; final String label; const _FeatureChip({required this.icon, required this.label}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), decoration: BoxDecoration( color: Colors.white.withOpacity(0.12), borderRadius: BorderRadius.circular(AppTheme.radiusMd), border: Border.all(color: Colors.white.withOpacity(0.2)), ), child: Column( children: [ Icon(icon, color: Colors.white, size: 22), const SizedBox(height: 5), Text( label, style: const TextStyle( fontSize: 11, color: Colors.white, fontWeight: FontWeight.w500, ), ), ], ), ); } }