import 'package:flutter/material.dart'; import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../core/theme/app_theme.dart'; import 'alerts_provider.dart'; class AlertsScreen extends ConsumerWidget { const AlertsScreen({super.key}); @override Widget build(BuildContext context, WidgetRef ref) { final alerts = ref.watch(alertsProvider); return Scaffold( backgroundColor: AppTheme.background, appBar: AppBar( title: const Text('Mis Alertas'), actions: [ if (alerts.isNotEmpty) IconButton( icon: const Icon(Icons.delete_sweep_outlined), tooltip: 'Limpiar historial', onPressed: () => ref.read(alertsProvider.notifier).clearAll(), ), ], ), body: alerts.isEmpty ? _buildEmptyState() : ListView.separated( padding: const EdgeInsets.all(16), itemCount: alerts.length, separatorBuilder: (_, __) => const SizedBox(height: 12), itemBuilder: (context, index) { return _AlertCard(alert: alerts[index]); }, ), ); } Widget _buildEmptyState() { return const Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.notifications_off_outlined, size: 64, color: AppTheme.textSecondary, ), SizedBox(height: 16), Text( 'No tienes notificaciones nuevas', style: TextStyle( fontSize: 16, fontWeight: FontWeight.w600, color: AppTheme.textPrimary, ), ), SizedBox(height: 8), Text( 'Aquí aparecerán los avisos del camión.', style: TextStyle(fontSize: 14, color: AppTheme.textSecondary), ), ], ), ); } } class _AlertCard extends StatelessWidget { final AppAlert alert; const _AlertCard({required this.alert}); String _timeAgo(DateTime date) { final diff = DateTime.now().difference(date); if (diff.inMinutes < 1) return 'Justo ahora'; if (diff.inHours < 1) return 'Hace ${diff.inMinutes} min'; if (diff.inDays < 1) return 'Hace ${diff.inHours} h'; return 'Hace ${diff.inDays} d'; } @override Widget build(BuildContext context) { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppTheme.surface, borderRadius: BorderRadius.circular(AppTheme.radiusLg), border: Border.all(color: AppTheme.border, width: 0.5), boxShadow: AppTheme.softShadow, ), child: Row( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( padding: const EdgeInsets.all(10), decoration: const BoxDecoration( color: AppTheme.primaryLight, shape: BoxShape.circle, ), child: const Icon( Icons.notifications_active_outlined, color: AppTheme.primary, size: 24, ), ), const SizedBox(width: 14), Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( alert.title, style: const TextStyle( fontSize: 15, fontWeight: FontWeight.w700, color: AppTheme.primaryDark, ), ), const SizedBox(height: 4), Text( alert.body, style: const TextStyle( fontSize: 14, color: AppTheme.textPrimary, height: 1.4, ), ), const SizedBox(height: 8), Text( _timeAgo(alert.timestamp), style: const TextStyle( fontSize: 12, color: AppTheme.textHint, ), ), ], ), ), ], ), ); } }