import 'package:flutter/material.dart'; import 'package:package_info_plus/package_info_plus.dart'; import '../../../core/theme/app_theme.dart'; class AboutScreen extends StatelessWidget { const AboutScreen({super.key}); @override Widget build(BuildContext context) { return Scaffold( backgroundColor: AppTheme.background, body: FutureBuilder( future: PackageInfo.fromPlatform(), builder: (context, snap) { final version = snap.data?.version ?? '1.0.0'; final build = snap.data?.buildNumber ?? '1'; return CustomScrollView( slivers: [ SliverToBoxAdapter( child: _buildPageHeader(context, version, build), ), SliverPadding( padding: const EdgeInsets.fromLTRB(20, 24, 20, 32), sliver: SliverList( delegate: SliverChildListDelegate([ _SectionLabel('Descripción'), const SizedBox(height: 10), _InfoCard( icon: Icons.info_outline_rounded, content: 'RecolectApp es una aplicación del Servicio de Limpia de Celaya ' 'para informar al ciudadano sobre rutas, horarios y separación ' 'correcta de residuos.', ), const SizedBox(height: 20), _SectionLabel('Créditos'), const SizedBox(height: 10), _InfoCard( icon: Icons.people_outline_rounded, content: 'Desarrollado por el equipo ONLINCESHACK.\nServicio de Limpia · Celaya, Gto.', ), const SizedBox(height: 20), _SectionLabel('Tecnología'), const SizedBox(height: 10), _TechRow(icon: Icons.phone_android_rounded, label: 'Flutter · Dart'), const SizedBox(height: 8), _TechRow(icon: Icons.cloud_outlined, label: 'FastAPI · Supabase'), const SizedBox(height: 8), _TechRow(icon: Icons.notifications_outlined, label: 'Firebase Cloud Messaging'), const SizedBox(height: 32), Center( child: Text( '© 2025 RecolectApp · Todos los derechos reservados', style: const TextStyle(fontSize: 11, color: AppTheme.textHint), textAlign: TextAlign.center, ), ), ]), ), ), ], ); }, ), ); } Widget _buildPageHeader(BuildContext context, String version, String build) { return Container( decoration: const BoxDecoration( gradient: LinearGradient( begin: Alignment.topLeft, end: Alignment.bottomRight, stops: [0.0, 0.6, 1.0], colors: [Color(0xFF4A0E26), Color(0xFF6D1234), Color(0xFF9B1B4A)], ), ), child: SafeArea( bottom: false, child: Padding( padding: const EdgeInsets.fromLTRB(20, 8, 20, 32), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ IconButton( icon: const Icon(Icons.arrow_back_ios_new_rounded, color: Colors.white, size: 20), onPressed: () => Navigator.of(context).pop(), padding: EdgeInsets.zero, constraints: const BoxConstraints(), ), ], ), const SizedBox(height: 16), Center( child: Column( children: [ Container( width: 80, height: 80, decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.15), shape: BoxShape.circle, border: Border.all( color: Colors.white.withValues(alpha: 0.3), width: 2, ), ), child: const Icon( Icons.recycling_rounded, size: 42, color: Colors.white, ), ), const SizedBox(height: 14), const Text( 'RecolectApp', style: TextStyle( fontSize: 24, fontWeight: FontWeight.w800, color: Colors.white, letterSpacing: -0.5, ), ), const SizedBox(height: 4), Text( 'Versión $version (build $build)', style: TextStyle( fontSize: 13, color: Colors.white.withValues(alpha: 0.75), ), ), const SizedBox(height: 6), Container( padding: const EdgeInsets.symmetric( horizontal: 12, vertical: 4), decoration: BoxDecoration( color: Colors.white.withValues(alpha: 0.15), borderRadius: BorderRadius.circular(100), border: Border.all( color: Colors.white.withValues(alpha: 0.25)), ), child: Text( 'Servicio de Limpia · Celaya, Gto.', style: TextStyle( fontSize: 11, color: Colors.white.withValues(alpha: 0.9), fontWeight: FontWeight.w500, ), ), ), ], ), ), ], ), ), ), ); } } class _SectionLabel extends StatelessWidget { final String text; const _SectionLabel(this.text); @override Widget build(BuildContext context) { return Text( text.toUpperCase(), style: TextStyle( fontSize: 11, fontWeight: FontWeight.w600, letterSpacing: 0.8, color: Theme.of(context).colorScheme.onSurfaceVariant, ), ); } } class _InfoCard extends StatelessWidget { final IconData icon; final String content; const _InfoCard({required this.icon, required this.content}); @override Widget build(BuildContext context) { return Container( decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, borderRadius: BorderRadius.circular(10), border: Border.all( color: Theme.of(context).colorScheme.outlineVariant, width: 0.5, ), ), child: ClipRRect( borderRadius: BorderRadius.circular(9.5), child: IntrinsicHeight( child: Row( crossAxisAlignment: CrossAxisAlignment.stretch, children: [ Container(width: 3, color: AppTheme.primary), Expanded( child: Padding( padding: const EdgeInsets.all(14), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( width: 34, height: 34, decoration: BoxDecoration( color: AppTheme.primaryLight, borderRadius: BorderRadius.circular(8), ), child: Icon(icon, size: 18, color: AppTheme.primary), ), const SizedBox(width: 12), Expanded( child: Text( content, style: const TextStyle( fontSize: 13, height: 1.5, color: AppTheme.textPrimary, ), ), ), ], ), ), ), ], ), ), ), ); } } class _TechRow extends StatelessWidget { final IconData icon; final String label; const _TechRow({required this.icon, required this.label}); @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 10), decoration: BoxDecoration( color: Theme.of(context).colorScheme.surface, borderRadius: BorderRadius.circular(10), border: Border.all( color: Theme.of(context).colorScheme.outlineVariant, width: 0.5), ), child: Row( children: [ Icon(icon, size: 18, color: AppTheme.primary), const SizedBox(width: 12), Text( label, style: const TextStyle(fontSize: 13, color: AppTheme.textPrimary), ), ], ), ); } }