Files
hackathon-acapulquitos-boys…/lib/features/routes/presentation/providers/routes_provider.dart

44 lines
1.9 KiB
Dart

// lib/features/routes/presentation/providers/routes_provider.dart
import 'package:flutter_riverpod/flutter_riverpod.dart';
import '../../data/repositories/routes_repository.dart';
import '../../domain/entities/route_entities.dart';
import '../../domain/entities/haversine.dart';
// ── Repositorio singleton ─────────────────────────────────────────────
final routesRepositoryProvider = Provider<RoutesRepository>(
(ref) => RoutesRepository(),
);
// ── Todas las rutas ───────────────────────────────────────────────────
final allRoutesProvider = FutureProvider<List<TruckRoute>>((ref) {
return ref.watch(routesRepositoryProvider).obtenerRutas();
});
// ── Ruta por ID ───────────────────────────────────────────────────────
final routeByIdProvider =
FutureProvider.family<TruckRoute?, String>((ref, routeId) {
return ref.watch(routesRepositoryProvider).obtenerRutaPorId(routeId);
});
// ── Asignación de ruta por coordenadas (Haversine) ────────────────────
final routeAssignmentProvider =
FutureProvider.family<RouteAssignmentResult, ({double lat, double lng})>(
(ref, coords) {
return ref
.watch(routesRepositoryProvider)
.asignarRuta(coords.lat, coords.lng);
},
);
// ── ETA para un domicilio ─────────────────────────────────────────────
final etaProvider = FutureProvider.family<
ETAResult,
({String routeId, double lat, double lng})>(
(ref, params) {
return ref
.watch(routesRepositoryProvider)
.calcularETA(params.routeId, params.lat, params.lng);
},
);