diff --git a/lib/presentation/providers/pokedex_provider.dart b/lib/presentation/providers/pokedex_provider.dart new file mode 100644 index 0000000..fdca4ca --- /dev/null +++ b/lib/presentation/providers/pokedex_provider.dart @@ -0,0 +1,34 @@ +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, + ); +});