// lib/features/recycling_guide/presentation/providers/recycling_provider.dart // Riverpod — compatible con lo que usa Persona C en el resto de la app. import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../data/repositories/recycling_repository.dart'; import '../../domain/entities/recycling_category.dart'; // ── Repositorio singleton ──────────────────────────────────────────── final recyclingRepositoryProvider = Provider( (ref) => RecyclingRepository(), ); // ── Categorías (carga inicial desde JSON) ──────────────────────────── final recyclingCategoriesProvider = FutureProvider>((ref) { return ref.watch(recyclingRepositoryProvider).obtenerCategorias(); }); // ── Estado del buscador ────────────────────────────────────────────── class RecyclingSearchNotifier extends StateNotifier { final RecyclingRepository _repo; RecyclingSearchNotifier(this._repo) : super(const RecyclingSearchState.idle()); Future buscar(String query) async { if (query.trim().isEmpty) { state = const RecyclingSearchState.idle(); return; } state = const RecyclingSearchState.loading(); final resultados = await _repo.buscar(query); state = RecyclingSearchState.done(resultados); } void limpiar() => state = const RecyclingSearchState.idle(); } final recyclingSearchProvider = StateNotifierProvider((ref) { return RecyclingSearchNotifier(ref.watch(recyclingRepositoryProvider)); }); // ── Estado sellado del buscador ────────────────────────────────────── sealed class RecyclingSearchState { const RecyclingSearchState(); const factory RecyclingSearchState.idle() = Idle; const factory RecyclingSearchState.loading() = Loading; const factory RecyclingSearchState.done(List results) = Done; } class Idle extends RecyclingSearchState { const Idle(); } class Loading extends RecyclingSearchState { const Loading(); } class Done extends RecyclingSearchState { final List results; const Done(this.results); }