44 lines
1.9 KiB
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);
|
|
},
|
|
);
|