// lib/features/eta/eta_provider.dart // Riverpod AsyncNotifier: carga ETA al abrir la app y al recibir push FCM. // No hace polling continuo. import 'package:flutter_riverpod/flutter_riverpod.dart'; import 'package:recolecta_app/features/eta/eta_model.dart'; import 'package:recolecta_app/features/eta/eta_service.dart'; // ────────────────────────────────────────── // Provider del addressId activo del ciudadano // (se puebla en el provider de auth/session) // ────────────────────────────────────────── class ActiveAddressIdNotifier extends Notifier { @override String? build() => null; } final activeAddressIdProvider = NotifierProvider( ActiveAddressIdNotifier.new, ); // ────────────────────────────────────────── // AsyncNotifier principal de ETA // ────────────────────────────────────────── class EtaNotifier extends AsyncNotifier { @override Future build() async { final addressId = ref.watch(activeAddressIdProvider); if (addressId == null) { throw Exception('No hay domicilio verificado'); } return ref.read(etaServiceProvider).fetchEta(addressId); } /// Llamar desde la UI (botón refrescar) o desde el handler de FCM. Future refresh() async { state = const AsyncLoading(); final addressId = ref.read(activeAddressIdProvider); if (addressId == null) return; state = await AsyncValue.guard( () => ref.read(etaServiceProvider).fetchEta(addressId), ); } } final etaProvider = AsyncNotifierProvider( EtaNotifier.new, );