Co-authored-by: eddgranados12 <eddgranados12@users.noreply.github.com>
Co-authored-by: MENDOZA BALLARDO GAEL RICARDO <gael-meb123@users.noreply.github.com> Co-authored-by: Azareth-Tr <Azareth-Tr@users.noreply.github.com> modificacion de las vistas principales para el usuario ciudadano, primer avance para el panel admin
This commit is contained in:
73
recolecta_app/lib/features/eta/eta_model.dart
Normal file
73
recolecta_app/lib/features/eta/eta_model.dart
Normal file
@@ -0,0 +1,73 @@
|
||||
// lib/features/eta/eta_model.dart
|
||||
// Modelo de respuesta del endpoint GET /eta?address_id=X
|
||||
// El backend NUNCA devuelve coordenadas; solo texto y status.
|
||||
|
||||
enum RouteStatus {
|
||||
pendiente,
|
||||
enRuta,
|
||||
completada,
|
||||
diferida,
|
||||
reasignada,
|
||||
}
|
||||
|
||||
RouteStatus routeStatusFromString(String s) {
|
||||
switch (s) {
|
||||
case 'en_ruta':
|
||||
return RouteStatus.enRuta;
|
||||
case 'completada':
|
||||
return RouteStatus.completada;
|
||||
case 'diferida':
|
||||
return RouteStatus.diferida;
|
||||
case 'reasignada':
|
||||
return RouteStatus.reasignada;
|
||||
default:
|
||||
return RouteStatus.pendiente;
|
||||
}
|
||||
}
|
||||
|
||||
class EtaResponse {
|
||||
/// Texto accionable que muestra el ciudadano.
|
||||
/// Ejemplos: "Llega en aproximadamente 15 minutos"
|
||||
/// "Servicio del día finalizado"
|
||||
final String mensaje;
|
||||
|
||||
/// Estado de la ruta para mostrar el badge correcto.
|
||||
final RouteStatus status;
|
||||
|
||||
/// Ventana horaria opcional, ej. "7:20–7:35 p.m."
|
||||
/// Solo presente cuando positionId == 4 (TRUCK_PROXIMITY).
|
||||
final String? ventanaHoraria;
|
||||
|
||||
const EtaResponse({
|
||||
required this.mensaje,
|
||||
required this.status,
|
||||
this.ventanaHoraria,
|
||||
});
|
||||
|
||||
factory EtaResponse.fromJson(Map<String, dynamic> json) {
|
||||
return EtaResponse(
|
||||
mensaje: json['mensaje'] as String,
|
||||
status: routeStatusFromString(json['status'] as String),
|
||||
ventanaHoraria: json['ventana_horaria'] as String?,
|
||||
);
|
||||
}
|
||||
|
||||
/// Estado de progreso local (0-3) mapeado al positionId del backend.
|
||||
/// Útil para la barra de 4 pasos en la UI.
|
||||
int get stepIndex {
|
||||
switch (status) {
|
||||
case RouteStatus.pendiente:
|
||||
return 0;
|
||||
case RouteStatus.enRuta:
|
||||
return 1;
|
||||
case RouteStatus.completada:
|
||||
return 3;
|
||||
default:
|
||||
return 2;
|
||||
}
|
||||
}
|
||||
|
||||
bool get isCompleted => status == RouteStatus.completada;
|
||||
bool get isNearby =>
|
||||
ventanaHoraria != null && status == RouteStatus.enRuta;
|
||||
}
|
||||
Reference in New Issue
Block a user