import 'package:flutter/material.dart'; // Asegúrate de que el nombre del import coincida exactamente con tu archivo creado import 'panel_configuracion_bottom_sheet.dart'; // ========================================== // 1. MODELO DE DATOS // ========================================== class Domicilio { final String id; final String etiqueta; final String direccion; Domicilio({required this.id, required this.etiqueta, required this.direccion}); } // ========================================== // 2. COMPONENTE: TARJETA DE LLEGADA (ETA) // ========================================== class TarjetaEtaWidget extends StatelessWidget { final String horaInicio; final String horaFin; final int minutosRestantes; final String estadoCamion; const TarjetaEtaWidget({ super.key, required this.horaInicio, required this.horaFin, required this.minutosRestantes, required this.estadoCamion, }); @override Widget build(BuildContext context) { final Color colorTema = estadoCamion == 'retrasado' ? Colors.amber[700]! : Colors.green[700]!; return Card( elevation: 3, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(20)), child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Row( children: [ Icon(Icons.local_shipping_rounded, color: colorTema), const SizedBox(width: 8), Text( estadoCamion == 'retrasado' ? 'Estado: Demorado' : 'Ruta en Progreso', style: TextStyle(color: colorTema, fontWeight: FontWeight.bold), ), ], ), const SizedBox(height: 8), Text( 'Llega en aproximadamente $minutosRestantes minutos', style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16), ), Text('Entre las $horaInicio y las $horaFin.'), ], ), ), ); } } // ========================================== // 3. PANTALLA PRINCIPAL // ========================================== class GestionDomiciliosScreen extends StatefulWidget { const GestionDomiciliosScreen({super.key}); @override State createState() => _GestionDomiciliosScreenState(); } class _GestionDomiciliosScreenState extends State { final List _misDomicilios = [ Domicilio(id: '1', etiqueta: 'Casa', direccion: 'Av. Paseo de la Reforma 222, CDMX'), Domicilio(id: '2', etiqueta: 'Trabajo', direccion: 'Colonia Centro, Calle Benito Juárez 45'), ]; bool _notificarInicioRuta = true; bool _notificarAproximacion = true; bool _notificarRetrasosFallas = true; void _simularNotificacionPush({required String titulo, required String mensaje, required IconData icono, required Color color}) { ScaffoldMessenger.of(context).hideCurrentSnackBar(); ScaffoldMessenger.of(context).showSnackBar( SnackBar( behavior: SnackBarBehavior.floating, backgroundColor: Colors.grey[900], content: Row( children: [ Icon(icono, color: color), const SizedBox(width: 12), Expanded(child: Text(titulo)), ], ), ), ); } void _abrirAjustesYFormulario(BuildContext context) { showModalBottomSheet( context: context, isScrollControlled: true, shape: const RoundedRectangleBorder( borderRadius: BorderRadius.vertical(top: Radius.circular(24)), ), builder: (context) { // Aquí llamamos a la clase externa. Al limpiar el archivo, // Android Studio sabrá perfectamente que nos referimos al Widget. return PanelConfiguracionBottomSheet( notificarInicioRuta: _notificarInicioRuta, notificarAproximacion: _notificarAproximacion, notificarRetrasosFallas: _notificarRetrasosFallas, onDomicilioGuardado: (etiqueta, direccion) { setState(() { _misDomicilios.add(Domicilio( id: DateTime.now().toString(), etiqueta: etiqueta, direccion: direccion, )); }); }, onAlertasChanged: (nuevoValor, tipoAlerta) { setState(() { if (tipoAlerta == 'inicio') _notificarInicioRuta = nuevoValor; if (tipoAlerta == 'aproximacion') _notificarAproximacion = nuevoValor; if (tipoAlerta == 'retrasos') _notificarRetrasosFallas = nuevoValor; }); }, ); }, ); } @override Widget build(BuildContext context) { return Scaffold( appBar: AppBar( title: const Text('Mis Domicilios'), backgroundColor: Colors.green[700], foregroundColor: Colors.white, ), body: Column( children: [ Padding( padding: const EdgeInsets.all(16.0), child: TarjetaEtaWidget( horaInicio: '7:20 p.m.', horaFin: '7:35 p.m.', minutosRestantes: 15, estadoCamion: 'en_camino', ), ), Expanded( child: ListView.builder( itemCount: _misDomicilios.length, itemBuilder: (context, index) { final domicilio = _misDomicilios[index]; return ListTile( leading: const Icon(Icons.location_on, color: Colors.green), title: Text(domicilio.etiqueta), subtitle: Text(domicilio.direccion), ); }, ), ), ], ), floatingActionButton: FloatingActionButton( onPressed: () => _abrirAjustesYFormulario(context), backgroundColor: Colors.green[700], child: const Icon(Icons.settings, color: Colors.white), ), ); } }