Subir archivos a "lib"
This commit is contained in:
112
lib/camion_estado.dart
Normal file
112
lib/camion_estado.dart
Normal file
@@ -0,0 +1,112 @@
|
||||
import 'dart:async';
|
||||
import 'package:flutter/material.dart';
|
||||
import 'notificaciones_service.dart';
|
||||
|
||||
// ─── ESTADO GLOBAL DEL CAMIÓN ───────────────────────────────────
|
||||
class CamionEstado extends ChangeNotifier {
|
||||
|
||||
int _positionId = 1;
|
||||
Timer? _timer;
|
||||
bool _corriendo = false;
|
||||
|
||||
// Configuración de alertas
|
||||
bool notificarInicioRuta = true;
|
||||
bool notificarCamionCerca = true;
|
||||
bool notificarRetrasos = false;
|
||||
|
||||
int get positionId => _positionId;
|
||||
bool get corriendo => _corriendo;
|
||||
|
||||
// Etiquetas de cada posición
|
||||
static const Map<int, String> etapas = {
|
||||
1: '🏭 En el Relleno Sanitario',
|
||||
2: '🚛 Ruta iniciada',
|
||||
3: '📍 En camino a tu sector',
|
||||
4: '⚡ Cerca de tu domicilio',
|
||||
5: '🏘️ En tu colonia',
|
||||
6: '📦 Recolectando residuos',
|
||||
7: '↩️ Regresando',
|
||||
8: '✅ Servicio finalizado',
|
||||
};
|
||||
|
||||
// ETA según posición
|
||||
static const Map<int, Map<String, dynamic>> etaInfo = {
|
||||
1: {'horaInicio': '--:--', 'horaFin': '--:--', 'minutos': 0, 'label': 'Sin servicio aún'},
|
||||
2: {'horaInicio': '7:00 p.m.','horaFin': '7:40 p.m.','minutos': 40, 'label': 'Ruta iniciada'},
|
||||
3: {'horaInicio': '7:10 p.m.','horaFin': '7:35 p.m.','minutos': 30, 'label': 'En camino'},
|
||||
4: {'horaInicio': '7:20 p.m.','horaFin': '7:30 p.m.','minutos': 15, 'label': 'Cerca de ti'},
|
||||
5: {'horaInicio': '7:25 p.m.','horaFin': '7:30 p.m.','minutos': 8, 'label': 'En tu colonia'},
|
||||
6: {'horaInicio': '7:28 p.m.','horaFin': '7:30 p.m.','minutos': 2, 'label': '¡Está aquí!'},
|
||||
7: {'horaInicio': '--:--', 'horaFin': '--:--', 'minutos': 0, 'label': 'Regresando'},
|
||||
8: {'horaInicio': '--:--', 'horaFin': '--:--', 'minutos': 0, 'label': 'Servicio completado'},
|
||||
};
|
||||
|
||||
// ── Iniciar timer ───────────────────────────────────────────
|
||||
void iniciarTimer() {
|
||||
if (_corriendo) return;
|
||||
_corriendo = true;
|
||||
_positionId = 1;
|
||||
notifyListeners();
|
||||
|
||||
// Avanza cada 8 segundos (puedes cambiarlo)
|
||||
_timer = Timer.periodic(const Duration(seconds: 8), (timer) async {
|
||||
if (_positionId >= 8) {
|
||||
detener();
|
||||
return;
|
||||
}
|
||||
|
||||
_positionId++;
|
||||
notifyListeners();
|
||||
|
||||
// Notificación automática al iniciar ruta
|
||||
if (_positionId == 2 && notificarInicioRuta) {
|
||||
await enviarNotificacion(
|
||||
id: 1,
|
||||
titulo: '¡Ruta Iniciada!',
|
||||
cuerpo: 'El camión recolector ha salido del Relleno Sanitario rumbo a tu sector. Asegúrate de tener listos tus residuos.',
|
||||
);
|
||||
}
|
||||
|
||||
// Notificación automática cuando está cerca
|
||||
if (_positionId == 4 && notificarCamionCerca) {
|
||||
await enviarNotificacion(
|
||||
id: 2,
|
||||
titulo: 'Camión Cercano 🚛',
|
||||
cuerpo: 'El camión está a menos de 15 minutos de tu domicilio. Es momento de sacar tus bolsas a la acera.',
|
||||
);
|
||||
}
|
||||
|
||||
// Notificación automática al finalizar
|
||||
if (_positionId == 8) {
|
||||
await enviarNotificacion(
|
||||
id: 3,
|
||||
titulo: 'Servicio Finalizado ✅',
|
||||
cuerpo: 'El camión de tu sector ha concluido su jornada de recolección diaria.',
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
// ── Detener timer ───────────────────────────────────────────
|
||||
void detener() {
|
||||
_timer?.cancel();
|
||||
_corriendo = false;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
// ── Reiniciar ───────────────────────────────────────────────
|
||||
void reiniciar() {
|
||||
detener();
|
||||
_positionId = 1;
|
||||
notifyListeners();
|
||||
}
|
||||
|
||||
@override
|
||||
void dispose() {
|
||||
_timer?.cancel();
|
||||
super.dispose();
|
||||
}
|
||||
}
|
||||
|
||||
// Instancia global accesible desde cualquier archivo
|
||||
final camionEstado = CamionEstado();
|
||||
Reference in New Issue
Block a user