import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../domain/entities/pokemon.dart'; import 'repository_provider.dart'; /// Liste complète du Pokédex (triée par id), avec synchro initiale gérée par le repository. class PokedexNotifier extends AsyncNotifier> { Future> _load() async { final repo = ref.read(pokemonRepositoryProvider); final list = await repo.getAll(); list.sort((a, b) => a.id.compareTo(b.id)); return list; } @override Future> build() => _load(); /// Recharge la liste (ex. après avoir attrapé un Pokémon). Future refresh() async { state = const AsyncLoading(); state = await AsyncValue.guard(_load); } } final pokedexProvider = AsyncNotifierProvider>(PokedexNotifier.new); /// Nombre de Pokémon attrapés, dérivé de la liste. final caughtCountProvider = Provider((ref) { final async = ref.watch(pokedexProvider); return async.maybeWhen( data: (list) => list.where((p) => p.isCaught).length, orElse: () => 0, ); });