From d531fcb2c85e3d51e53658d104170373d87b1948 Mon Sep 17 00:00:00 2001 From: Maxiwere45 Date: Tue, 9 Jun 2026 11:30:55 +0200 Subject: [PATCH] feat(presentation): add pokedex AsyncNotifier provider Co-Authored-By: Claude Opus 4.8 --- .../providers/pokedex_provider.dart | 34 +++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 lib/presentation/providers/pokedex_provider.dart 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, + ); +});