From bbf958cafa67fc9ffca7da0327aec4121f11c191 Mon Sep 17 00:00:00 2001
From: Adrien Bonnin <adbonnin@ippon.fr>
Date: Fri, 19 Aug 2022 18:17:10 +0200
Subject: [PATCH] :bookmark: Version 1.1

---
 README.md                                     | 239 +++++++++++++-----
 docs/images/autodispose.png                   | Bin 0 -> 4223 bytes
 docs/images/circle_of_life.png                | Bin 0 -> 8494 bytes
 docs/images/family.png                        | Bin 0 -> 3374 bytes
 docs/images/schemas.vsdx                      | Bin 33089 -> 37784 bytes
 docs/images/zelda_sword.png                   | Bin 0 -> 8580 bytes
 test/autodispose.dart                         |  27 ++
 test/circle_of_life.dart                      |  37 +++
 ...cyclique.dart => circular_dependency.dart} |   2 +-
 test/family.dart                              |  17 ++
 test/{test_overrides.dart => overrides.dart}  |   0
 11 files changed, 261 insertions(+), 61 deletions(-)
 create mode 100644 docs/images/autodispose.png
 create mode 100644 docs/images/circle_of_life.png
 create mode 100644 docs/images/family.png
 create mode 100644 docs/images/zelda_sword.png
 create mode 100644 test/autodispose.dart
 create mode 100644 test/circle_of_life.dart
 rename test/{dependance_cyclique.dart => circular_dependency.dart} (88%)
 create mode 100644 test/family.dart
 rename test/{test_overrides.dart => overrides.dart} (100%)

diff --git a/README.md b/README.md
index 1cbae49..248d683 100644
--- a/README.md
+++ b/README.md
@@ -1,29 +1,28 @@
-# Découvrir Riverpod par la pratique
+# Riverpod par la pratique : découverte des bases
 
-Cet article a pour objectif de faire découvrir pas à pas la bibliothèque Riverpod à partir d'exemples d'utilisation.
+Cet article a pour objectif de vous faire découvrir pas à pas la bibliothèque Riverpod à partir d'exemples d'utilisation.
 
-## Introduction
+## Il était une fois la gestion d’états
 
-Riverpod est une bibliothèque de state management pour Flutter.
-Le state management, ou gestion d'état en français, a pour responsabilité de mettre à disposition les différents objets qui constituent l'état de l'application.
-Le terme _"état"_, employé tout au long de cet article, fait précisément référence à ces états.
+Riverpod est une bibliothèque de gestion d’états pour Flutter.
+La _"gestion d’états"_, ou _"state management"_ en anglais, a pour responsabilité de mettre à disposition les différents objets qui constituent l'état de l'application.
 
 La principale particularité de Flutter est que tout est widget.
-Le state management ne faisant pas exception, de nombreuses bibliothèques sont apparues proposant chacune leurs propres patterns et méthodes de fonctionnement.
+La gestion d’états ne faisant pas exception, de nombreuses bibliothèques sont apparues proposant chacune leurs propres patterns et méthodes de fonctionnement.
 Parmi les plus utilisées on peut citer [BLoC](https://pub.dev/packages/bloc), [GetX](https://pub.dev/packages/get), [Provider](https://pub.dev/packages/provider) et aujourd'hui c'est [Riverpod](https://pub.dev/packages/riverpod) qui nous intéresse.
 
 Le créateur et principal contributeur de Riverpod, Remi Rousselet, n'en est pas à son premier ballon d'essai.
-Reconnu au sein de la communauté Dart et Flutter, il est entre autre l'auteur de [freezed](https://pub.dev/packages/freezed) (un générateur de code pour les data-classes et unions), [flutter_hooks](https://pub.dev/packages/flutter_hooks) (une implémentation des hooks React) et [Provider](https://pub.dev/packages/provider) (un autre state management).
-Cette dernière est le point de départ d'une réflexion plus ambitieuse sur le state management qui impliquera une réécriture complète pour aboutir à Riverpod.
+Reconnu au sein de la communauté Dart et Flutter, il est entre autre l'auteur de [freezed](https://pub.dev/packages/freezed) (un générateur de code pour les data-classes et unions), [flutter_hooks](https://pub.dev/packages/flutter_hooks) (une implémentation des hooks React) et [Provider](https://pub.dev/packages/provider) (une autre gestion d’états).
+Cette dernière est le point de départ d'une réflexion plus ambitieuse sur la gestion d'états qui impliquera une réécriture complète pour aboutir à Riverpod.
 Cet article fait référence à la bibliothèque Provider sous ces termes uniquement pour ne pas la confondre avec la classe `Provider` présente dans Riverpod.
 
-## Installation
+## En route avec Riverpod !
 
 Dès son installation, Riverpod se distingue de ses concurrentes par son découpage en plusieurs bibliothèques :
 
 - [`riverpod`](https://pub.dev/packages/riverpod) contient le code principale, sans aucune adhérence.
 - [`riverpod_flutter`](https://pub.dev/packages/flutter_riverpod) contient le code spécifique pour le framework Flutter.
-- [`hooks_riverpod`](https://pub.dev/packages/hooks_riverpod) contient le code spécifique pour la bibliothèque [`flutter_books`](https://pub.dev/packages/flutter_hooks).
+- [`hooks_riverpod`](https://pub.dev/packages/hooks_riverpod) contient le code spécifique pour la bibliothèque [`flutter_hooks`](https://pub.dev/packages/flutter_hooks).
 
 La bibliothèque `flutter_riverpod` sera utilisée pour aborder l'ensemble des fondamentaux de Riverpod.
 La dépendance est à ajouter dans le fichier pubspec.yaml :
@@ -69,12 +68,12 @@ void main() {
 }
 ```
 
-![Provider](docs/images/provider.png)
+![provider](docs/images/provider.png)
 
 Le `Provider` est instancié en tant que variable globale et son état est initialisé avec la valeur 13 `<1>`.
 L'instance du `ProviderContainer` contient les états `<2>` et permet de les récupérer en passant l'instance du `Provider` en paramètre de sa méthode `read` `<3>`.
 
-Déclarer le `Provider` en tant que variable globale `<1>` peut sembler une erreur de conception mais il n'en est rien.
+Déclarer le `Provider` en tant que variable globale `<1>` peut sembler une erreur de conception, mais il n'en est rien.
 Il est avant tout immutable et ne contient pas un état, mais constitue un __moyen de le récupérer__.
 La visibilité globale est alors un choix judicieux pour le rendre disponible n'importe où dans le code.
 
@@ -83,18 +82,105 @@ Cette erreur est levée quand un état est accédé alors qu'il n'a pas été en
 Le provider étant responsable de l'initialisation de l'état, ce dernier sera systématiquement initialisé avant d'être récupéré.
 
 > Le contrat du `Provider` se limite à la récupération d'un état.  
-> Il est __trés fortement recommandé__ d'utiliser des objets immutables pour définir les états, les modifications internes sont à proscrire et ne seront pas notifiées.
+> Les modifications internes de l’état ne sont pas notifiées pour favoriser l’utilisation d’objets immutables.
 
-Plus généralement, l'immutabilité des objets échangés est, entre autres, une bonne pratique dans le développement événementiel car elle limite les effets de bord.
+Plus généralement, l'immutabilité des objets échangés est, entre autres, une bonne pratique dans le développement événementiel, car elle limite les effets de bord.
 La déclaration de ces objets peut se révéler fastidieuse en Dart et c'est ce que propose de simplifier la bibliothèque [freezed](https://pub.dev/packages/freezed).
 
-## Test, test, test and test
+## Le cycle de vie des Providers
 
-Étant donné que le `ProviderContainer` contient les états, en instancier un nouveau pour chaque test permet de garantir leur isolation.
+La récupération de son état n'est qu'une partie du cycle de vie d'un `Provider`.
+Le paramètre `ProviderRef`, présent dans l'initialisation de chaque `Provider`, propose par sa méthode `onDispose` de définir une callback qui sera appelée pour libérer ses ressources.
+
+[source : circle_of_life.dart](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/circle_of_life.dart)
+```dart
+void main() {
+  test('doit vérifier le cycle de vie du Provider', () {
+    const defaultValue = -1;
+
+    // given:
+    final container = ProviderContainer();
+
+    var intValue = defaultValue; // <1>
+    var disposed = false;
 
-En plus de contenir les états, le `ProviderContainer` gère aussi leurs cycles de vie et sa méthode `dispose` libère ces ressources à la fin des tests.
+    final intProvider = Provider.autoDispose<int>((ref) {
+      ref.onDispose(() => disposed = true);
+      return intValue = 13;
+    });
 
-Pour homogénéiser leurs écritures et éviter d'éventuels oublis de libération de ressources, la déclaration des `ProviderContainer` peut être factorisée comme le fait Riverpod avec [la méthode createContainer](https://github.com/rrousselGit/riverpod/blob/v1.0.4/packages/flutter_riverpod/test/utils.dart#L11).
+    // expect:
+    expect(intValue, equals(defaultValue)); // <2>
+    expect(disposed, isFalse);
+
+    // when:
+    container.read(intProvider); // <3>
+
+    // then:
+    expect(intValue, equals(13)); // <4>
+    expect(disposed, isFalse);
+
+    // when:
+    container.dispose(); // <5>
+
+    // then:
+    expect(disposed, isTrue); // <6>
+  });
+}
+```
+
+![Circle of life](docs/images/circle_of_life.png)
+
+Le `Provider` est déclaré au sein du test pour retenir son affectation d'état et sa libération de ressources `<1>`.
+Avant toute manipulation, sa valeur n'est toujours pas affectée `<2>`.
+Ce n'est qu'après avoir été lu `<3>` que sa valeur est initialisée `<4>`.
+Les ressources du `Provider` sont libérées `<6>` avec celles du `ProviderContainer` `<5>`.
+
+> En plus de contenir les états, le `ProviderContainer` gère aussi leurs cycles de vie.  
+> Un état ne sera initialisé qu'à partir du moment où il sera lu, reflétant la nature paresseuse (lazy) du `ProviderContainer`.
+
+Pour des questions de consommation mémoire, il est parfois nécessaire d'écourter la vie d'un `Provider` en libérant ses ressources dès qu'il n'est plus utilisé.
+Ce comportement additionnel du `Provider` est à ajouter dès sa déclaration avec le _modifier_ `autodispose` :
+
+[source : autodispose.dart](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/autodispose.dart)
+```dart
+void main() {
+  test('doit vérifier que les ressources du Provider sont libérées', () async {
+    // given:
+    final container = ProviderContainer();
+    addTearDown(container.dispose);
+
+    var disposed = false; // 1
+    final provider = Provider.autoDispose<void>((ref) {
+      ref.onDispose(() => disposed = true);
+    });
+
+    // when:
+    container.read(provider); // <2>
+
+    // then:
+    expect(disposed, isFalse); // <3>
+
+    // when:
+    await Future.delayed(const Duration(milliseconds: 1)); // <4>
+
+    // then:
+    expect(disposed, isTrue); // <5>
+  });
+}
+```
+
+![Provider](docs/images/autodispose.png)
+
+Le `Provider` est déclaré pour que ses ressources soient libérées dès qu'il n'est plus utilisé `<1>`.
+Après avoir été lu `<2>` ses ressources ne sont pas instantanément libérées `<3>`.
+Ce n'est qu'après avoir lâché la main sur la boucle synchrone `<4>` que la libération asynchrone de ses ressources est effective `<5>`.
+
+> Un `Provider` déclaré avec le _modifier_ `autodispose` libère son état de manière asynchrone dès qu'il n'est plus utilisé.
+
+## Test, test, test and test
+
+Pour homogénéiser l'écriture des tests et éviter d'éventuels oublis de libération de ressources, la déclaration des `ProviderContainer` peut être factorisée comme le fait Riverpod avec [la méthode createContainer](https://github.com/rrousselGit/riverpod/blob/v1.0.4/packages/flutter_riverpod/test/utils.dart#L11).
 Cette méthode sera par la suite utilisée dans les prochains tests de cet article.
 
 [_source : utils.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/utils.dart)
@@ -117,11 +203,13 @@ ProviderContainer createContainer({
 }
 ```
 
-La variable `overrides` présente dans cette factory de `ProviderContainer` va se révéler particulièrement utile pour préparer la situation initiale des tests.
+Étant donné que le `ProviderContainer` contient les états, en instancier un nouveau pour chaque test permet de garantir leur isolation.
+
+La variable `overrides` passée à l'initialisation du `ProviderContainer` va se révéler particulièrement utile pour préparer la situation initiale des tests.
 La liste d'`Override`s qu'elle contient vient surcharger le comportement du `ProviderContainer`.
 Ces `Override`s sont retournés par les méthodes idoines du `Provider`, `overrideWithProvider` pour le remplacer et `overrideWithValue` pour remplacer l'état récupéré. 
 
-[_source : test_overrides.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/test_overrides.dart)
+[_source : overrides.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/overrides.dart)
 ```dart
 final intProvider = Provider<int>((_) => 13); // <1>
 final otherIntProvider = Provider<int>((_) => 13);
@@ -149,6 +237,35 @@ Deux `Providers` sont déclarés pour retourner la valeur 13 `<1>`.
 Le comportement du `ProviderContainer` est surchargé pour remplacer le premier `Provider` et pour remplacer la valeur retournée par le second `<2>`.
 La valeur récupérée par les deux est maintenant de 42 `<3>`.
 
+## Distinction des états pour un Provider
+
+Un même `Provider` peut se voir confié plusieurs états en attribuant à chacun une clef.
+Le _modifier_ `family` ajoute ce comportement à la déclaration du `Provider` en définissant le type de la clef avec son générique :
+
+```dart
+final evenProvider = StateProvider.family<bool, int>((_, arg) => arg.isEven); // <1>
+
+void main() {
+  test('doit distinguer chaque état dans un provider', () {
+    // given:
+    final container = createContainer();
+
+    // then:
+    expect(container.read(evenProvider(13)), isFalse); // <2>
+    expect(container.read(evenProvider(42)), isTrue);
+  });
+}
+```
+
+![.family](docs/images/family.png)
+
+Un `Provider` est déclaré pour indiquer par ses états si la clef passée en paramètre est paire `<1>`.
+La lecture du `Provider` se fait en passant cette clef et la valeur correspondante est retournée `<2>`.
+
+Pour simplifier, le _modifier_ `family` transforme le `Provider` en `Map` avec comme clefs son générique et comme valeurs les états correspondants.
+
+> Un `Provider` déclaré avec le _modifier_ `family` dispose d'autant d'états que de clef qui leur sont attribuées.
+
 ## Changer d'état avec le StateProvider
 
 Le `Provider` est un moyen de récupérer un état, mais en aucun cas de le modifier.
@@ -175,7 +292,7 @@ void main() {
 }
 ```
 
-![Provider](docs/images/state_provider.png)
+![StateProvider](docs/images/state_provider.png)
 
 Le `StateProvider` est instancié de la même manière qu'un `Provider`, en initialisant son état avec la valeur 13 `<1>`.
 Le notifier du `StateProvider` est récupéré par l'intermédiaire du `ProviderContainer` et son état est remplacé par la valeur 42 `<2>`.
@@ -193,11 +310,9 @@ D'un point de vue conceptuel, l'unique interaction que partagent toutes les clas
 Cependant, chaque classe de `Provider` dispose de son propre contrat et c'est par l'intermédiaire de providers additionnels que les comportements sont adaptés.
 Dans le cas du `StateProvider`, c'est le provider additionnel `notifier` qui ajoute le changement de valeur.
 
-## Surveillance des Providers
+## Surveillance entre Providers
 
-En plus de lire l'état d'un `Provider`, il est possible de surveiller ses changements.
-Par souci de simplicité, le paramètre `ProviderRef`, présent dans l'initialisation de chaque `Provider`, avait été jusque-là ignoré.
-C'est par son intermédiaire qu'un `Provider` peut lire et/ou surveiller d'autres `Provider`s et ainsi former un graphe de dépendances.
+Un `Provider` peut surveiller un autre `Provider` dès son initialisation par l'intermédiaire de la méthode `watch` du paramètre `ProviderRef` :
 
 [_source : watch.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/watch.dart)
 ```dart
@@ -224,20 +339,21 @@ void main() {
 }
 ```
 
-![Provider](docs/images/watch.png)
+![watch modifier](docs/images/watch.png)
 
 Le `StateProvider` `intProvider` est initialisé avec la valeur 13, `readProvider` vient lire son état et `watchProvider` le surveiller `<1>`.
-Lors de leurs première lecture, l'état des `readProvider` et `watchProvider` sont identiques à celui du `intProvider` `<2>`.
+Lors de leurs premières lectures, l'état des `readProvider` et `watchProvider` sont identiques à celui du `intProvider` `<2>`.
 L'état du `intProvider` est modifié avec la valeur 42 `<3>` et seulement `watchProvider` prend en compte ce changement `<4>`.
 
 Le comportement des méthodes `read` et `watch` est identique lors de la première initialisation, l'état du `intProvider` est récupéré pour être ensuite retourné.
-C'est lors de la modification du intProvider `<3>` que les comportements divergent.
+C'est lors de la modification du `intProvider` `<3>` que les comportements divergent.
 Le `readProvider` ne se préoccupe pas de cette nouvelle valeur alors que la `watchProvider` vient appeler de nouveau sa méthode d'initialisation `<1>` pour mettre à jour son état en adéquation avec celui du `intProvider`.
 
-> Le `ProviderRef` peut être concidéré comme une façade au `ProviderContainer`.  
-> Le comportement attendu de ses méthodes `read` et `watch` est identique selon que l'on l'utilise `ProviderContainer` dans le corps du test ou `ProviderRef` dans l'initialisation du `Provider`.
+> Un `Provider` peut écouter un autre `Provider` dès son utilisation pour former un graphe de dépendances.
+> Le `ProviderRef` peut être considéré comme une façade au `ProviderContainer`.
+> Le comportement attendu des méthodes `read` et `watch` est identique selon que l'on utilise un `ProviderContainer` dans le corps du test ou un `ProviderRef` dans l'initialisation du `Provider`.
 
-Ce fonctionnement est illustré par le code ci-dessous tiré de Riverpod :
+Ce fonctionnement en façade est illustré par le code ci-dessous tiré de Riverpod :
 
 [_source : provider_base.dart_](https://github.com/rrousselGit/riverpod/blob/v1.0.4/packages/riverpod/lib/src/framework/provider_base.dart#L657)
 ```dart
@@ -250,9 +366,9 @@ T read<T>(ProviderBase<T> provider) {
 }
 ```
 
-A noter que la surveillance vient créer un lien de dépendance entre les `Provider`s et peut mener à l'apparition de dépendances cycliques :
+À noter que la surveillance vient créer un lien de dépendance entre les `Provider`s et peut mener à l'apparition de dépendances circulaires :
 
-[_source : dependance_cyclique.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/dependance_cyclique.dart)
+[_source : circular_dependency.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/circular_dependency.dart)
 ```dart
 final Matcher throwsProviderException = throwsA(const TypeMatcher<ProviderException>());
 
@@ -260,7 +376,7 @@ final Provider<int> provider = Provider<int>((ref) => ref.watch(otherProvider));
 final Provider<int> otherProvider = Provider<int>((ref) => ref.watch(provider));
 
 void main() {
-  test('doit lever une exception suite à une dépendance cyclique', () {
+  test('doit lever une exception suite à une dépendance circulaires', () {
     // given:
     final container = createContainer();
 
@@ -272,7 +388,7 @@ void main() {
 
 Une interdépendance est déclarée entre deux `Provider` `<1>` et à la lecture de l'un d'entre eux une exception est levée `<2>`.
 
-> Riverpod dispose d'un mécanisme qui vient lever une exception quand une dépendance cyclique est détectée.
+> Riverpod dispose d'un mécanisme qui vient lever une exception quand une dépendance circulaire est détectée.
 
 ## Le listener qui écoutait à l'oreille des Providers
 
@@ -318,7 +434,7 @@ void main() {
 }
 ```
 
-![Provider](docs/images/listener.png)
+![listener](docs/images/listener.png)
 
 Le `StateProvider` `intProvider` est initialisé avec la valeur 13 et `watchProvider` surveille ses modifications `<1>`.
 Des listeners écoutent leurs changements d'état respectif pour stocker les nouvelles valeurs `<2>`.
@@ -330,13 +446,14 @@ Ce n'est qu'après la lecture du `watchProvider` que son listener est notifié `
 
 Écouter un provider avec la méthode `listen` permet d'être notifié lors d'un changement d'état.
 Ce changement d'état ne sera effectif qu'à partir du moment où il sera lue et non à partir du moment où il a été modifié, c'est un __fonctionnement passif__.
-C'est pour cette raison que la valeur de `watchValue` reste à -1 `<6>`.
+C'est pour cette raison que la valeur de `watchValue` conserve sa valeur par défaut `<6>`.
 
 Surveiller un provider avec la méthode `watch` vient lire le nouvel état à la suite d'un changement.
 Ce changement d'état est effectif dès sa modification, c'est un __fonctionnement actif__.
+Cependant, le fonctionnement paresseux du `ProviderContainer` ne propagera le changement `<7>` qu'à partir du moment où le `Provider` sera lu `<6>`.
 
-> Riverpod intialise les états de manière paresseuse (lazy).  
-> Un état ne sera initialisé qu'à partir du moment où il sera lu, par un `read` ou un `watch`.
+> Écouter est un fonctionnement passif alors que surveiller est un fonctionnement actif.
+> En plus d'être paresseux à l'initialisation des états, le `ProviderContainer` l'est également lors leurs modifications.
 
 ## Devenir sélectif dans les changements d'états
 
@@ -378,7 +495,7 @@ void main() {
 }
 ```
 
-![Provider](docs/images/select.png)
+![select](docs/images/select.png)
 
 Le `StateProvider` `intProvider` est initialisé avec la valeur 13 et le `moduloProvider` vient l'écouter en sélectionnant uniquement le modulo de 10 de l'état `<1>`.
 Un compteur écoute le nombre de changements réalisés par `moduloProvider` `<2>`.
@@ -386,7 +503,7 @@ Initialement le modulo de 13 vaut 3 et aucun changement n'est encore réalisé `
 Suite à la modification de la valeur de `intProvider` par 42 `<4>`, le modulo vaut 2 et un changement est ajouté au compteur `<5>`.
 La valeur du `intProvider` est à nouveau modifiée avec la valeur 22 `<6>` mais étant donné que son modulo est identique à celui de 42 aucune modification n'est apportée à l'état du `moduloProvider` `<7>`.
 
-A noter que cet exemple n'a vocation qu'à présenter la théorie : l'utilisation du `select` dans l'initialisation d'un provider ne présente aucun intérêt étant donné que le comportement est identique à celui d'un `Provider` effectuant lui même l'opération :
+À noter que cet exemple n'a vocation qu'à présenter la théorie : l'utilisation du `select` dans l'initialisation d'un provider ne présente aucun intérêt étant donné que le comportement est identique à celui d'un `Provider` effectuant lui-même l'opération :
 
 ```dart
 final moduloProvider = Provider<int>((ref) => ref.watch(intProvider) % 10);
@@ -455,23 +572,23 @@ void main() {
 }
 ```
 
-![Provider](docs/images/state_notifier_provider.png)
+![state_notifier_provider](docs/images/state_notifier_provider.png)
 
 Le `StateProvider` `intProvider` est initialisé avec la valeur 13 `<1>`. 
-Il est écouté par le `StateNotifierProvider` `incrementProvider` dont le notifier `IncrementNotifier` dispose d'une méthode pour incrémenté son état `<2>`.
+Il est écouté par le `StateNotifierProvider` `incrementProvider` dont le notifier `IncrementNotifier` dispose d'une méthode pour incrémenter son état `<2>`.
 L'état récupéré par le `incrementProvider` est bien celui du `intProvider` `<3>`.
 L'appel à la méthode `increment` `<4>` fait passer la valeur du `incrementProvider` de 13 à 14 `<5>`.
-Après avoir modifier l'état du `intProvider`, le `incrementProvider` est initialisé à nouveau et prend la valeur 42.
+Après avoir modifié l'état du `intProvider`, le `incrementProvider` est initialisé à nouveau et prend la valeur 42.
 
 > Le contrat du `StateNotifierProvider` va de la récupération à la modification de l'état.  
-> La classe `StateNotifier` est à étendre en indiquant le type du state en générique et de passer sa valeur initiale au constructeur parent.  
+> La classe `StateNotifier` est à étendre en indiquant le type de l'état en générique et de passer sa valeur initiale au constructeur parent.  
 > L'état est stocké dans la variable `state` avec une visibilité limitée en `protected` pour conserver une implémentation étanche.  
 > Les modifications sont réalisées en affectant un nouvel objet à la variable `state`.  
 > Chacune de ces modifications est ensuite notifiée aux objets qui le surveillent.
 
 ## ChangeNotifierProvider, le vilain petit canard
 
-Jusqu'à présent les états se devaient d'être immutables mais pour des questions de performances ou de conception il est parfois nécessaire d'abandonner cette bonne pratique.
+Jusqu'à présent les états se devaient d'être immutables mais, pour des questions de performances ou de conception, il est parfois nécessaire d'abandonner cette bonne pratique.
 Le `ChangeNotifierProvider` répond à ce cas de figure en laissant à la charge du développeur de notifier les changements apportés à l'état :
 
 ```dart
@@ -531,7 +648,7 @@ void main() {
 }
 ```
 
-![Provider](docs/images/change_notifier_provider.png)
+![change_notifier_provider](docs/images/change_notifier_provider.png)
 
 La classe `IncrementNotifier`, un `ChangeNotifier` avec une méthode `increment` pour incrémenter sa propriété `number`, est initialisé avec la valeur 13 `<1>`.
 La propriété `number` de son `notifier` dispose bien de la valeur 13.
@@ -539,20 +656,19 @@ Après avoir été incrémentée `<3>`, la valeur prend la valeur 14 `<4>`.
 
 Aucune séparation n'étant faite entre le __contenant__ et le __contenu__ du `ChangeNotifier`, il est retourné par le `ProviderContainer` aussi bien en tant qu'état `<2>`, qu'en tant que provider additionnel `notifier` `<4>`.
 
-A noter que la classe `ChangeNotifier` est initialement proposée par Flutter pour fournir un mécanisme d'écoute et de notification.
-Le `ChangeNotifierProvider` est donc parfois utile pour migrer d'anciennes applications utilisant le `ChangeNotifier` comme state management.
+À noter que la classe `ChangeNotifier` est initialement proposée par Flutter pour fournir un mécanisme d'écoute et de notification.
+Le `ChangeNotifierProvider` est donc parfois utile pour migrer d'anciennes applications utilisant le `ChangeNotifier` comme gestion d'états.
 
 ## Détour sur le Future avec le FutureProvider
 
-La classe `Future` et Riverpod partagent un même monde que tout oppose.
 Le `Future` est mutable et utilise des callbacks alors que Riverpod prône l'immutabilité et utilise des états.
-Le `FutureProvider` est là pour les réconcilier autour de l'`AsyncValue`.
+Ces deux conceptions, radicalement opposées, deviennent compatible en adaptant le `Future` par un `FutureProvider`.
 
-L'interface[^1] `AsyncValue` proposée par Riverpod reflète par ses différentes implémentations les états que prend un `Future`.
-L'état de chargement, de retour de la donnée et d'erreur sont respectivement représentés par les factories `AsyncValue.loading`, `AsyncValue.data` et `AsyncValue.error`.
-À cela vient s'ajouter la méthode statique `AsyncValue.guard` pour transformer un `Future` en `AsyncValue`.
+Le `FutureProvider` retourne l'interface[^1] `AsyncValue` dont les implémentations traduisent en états immutables les différentes étapes d'un `Future`.
+Le chargement, les callbacks de retour et d'erreur sont respectivement représentés par ses factories `AsyncValue.loading`, `AsyncValue.data` et `AsyncValue.error`.
+À cela vient s'ajouter la méthode statique `AsyncValue.guard` pour adapter une fonction retournant un `Future` en `Future` d'`AsyncValue`.
 
-Pour faciliter son utilisation, `AsyncValue` dispose des mêmes méthodes que [les unions de Freezed](https://pub.dev/packages/freezed#union-types-and-sealed-classes) avec un équivalent au pattern matching avec [l'extension `AsyncValueX`](https://pub.dev/documentation/riverpod/latest/riverpod/AsyncValueX.html).
+L'utilisation de l`AsyncValue` est simplifiée par les méthodes de son [extension `AsyncValueX`](https://pub.dev/documentation/riverpod/latest/riverpod/AsyncValueX.html), inspirée par [les unions de freezed](https://pub.dev/packages/freezed#union-types-and-sealed-classes), en proposant un équivalent au pattern matching.
 
 [_source : future_provider.dart_](https://gitlab.ippon.fr/adbonnin/article_flutter_riverpod/-/blob/main/test/future_provider.dart)
 ```dart
@@ -579,7 +695,7 @@ void main() {
 }
 ```
 
-![Provider](docs/images/future_provider.png)
+![future_provider](docs/images/future_provider.png)
 
 Un `FutureProvider` est instancié pour que son état prenne la valeur 13 après 100ms `<1>`.
 Tant que le `Futur` n'a pas été résolu, aucune valeur n'est attribuée à l'état et il conserve la valeur `AsyncLoading` `<2>`.
@@ -626,17 +742,20 @@ void main() {
 }
 ```
 
-![Provider](docs/images/stream_provider.png)
+![stream_provider](docs/images/stream_provider.png)
 
 Une `Stream` est déclarée pour retourner la valeur 13 suivie d'une erreur, le tout entrecoupé par un délai de 100 millisecondes `<1>`.
 Tant que la première valeur de la `Stream` n'est pas retournée, l'état conserve la valeur `AsyncLoading` `<2>`.
 Après avoir attendu 150ms `<3>`, l'état devient un `AsynData` avec pour valeur 13 `<4>`.
 Une exception est levée 100ms plus tard `<5>` et l'état retourne une `AsyncError` `<6>`.
 
-## Conclusion
+## L'aventure ne fait que commencer...
 
 Ainsi se termine ce premier article sur Riverpod.
 Vous disposez maintenant des bases pour en comprendre les principaux mécanismes.
+
 Le prochain article sera plus court et portera sur son intégration avec Flutter.
 
-[^1] Les interfaces n'existent pas à proprement parler en Dart, ce sont des classes abstraites avec des méthodes abstraites dont l'interface implicite est implementée.
\ No newline at end of file
+![zelda_sword](docs/images/zelda_sword.png)
+
+[^1]: Les interfaces n'existent pas à proprement parler en Dart, ce sont des classes abstraites avec des méthodes abstraites dont l'interface implicite est implémentée.
\ No newline at end of file
diff --git a/docs/images/autodispose.png b/docs/images/autodispose.png
new file mode 100644
index 0000000000000000000000000000000000000000..242c0327df46ea4f82febc3f4a2776c74181627c
GIT binary patch
literal 4223
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
Uv4m*?_-Oz#yl(<6)p3aY7ueoJ!2kdN

literal 0
HcmV?d00001

diff --git a/docs/images/circle_of_life.png b/docs/images/circle_of_life.png
new file mode 100644
index 0000000000000000000000000000000000000000..f4aba09720b378142e282c72773bef7bd955baf5
GIT binary patch
literal 8494
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

literal 0
HcmV?d00001

diff --git a/docs/images/family.png b/docs/images/family.png
new file mode 100644
index 0000000000000000000000000000000000000000..6f65fd62a50de225e484ac5797dbefc7cc5c42ba
GIT binary patch
literal 3374
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
Fe*u?Qd;kCd

literal 0
HcmV?d00001

diff --git a/docs/images/schemas.vsdx b/docs/images/schemas.vsdx
index a799ef7d8bc7a7119c6cdfb33219d806720b966f..00a0d60a28eef6444230cb5ed7e55084b3e58eda 100644
GIT binary patch
delta 24994
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

delta 20335
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
Pf^d&<f;7yie|rB14irFe

diff --git a/docs/images/zelda_sword.png b/docs/images/zelda_sword.png
new file mode 100644
index 0000000000000000000000000000000000000000..84296dc11f1cb17b4f6afda148497dbcf10e8060
GIT binary patch
literal 8580
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
V+Q+Io9(e$OiQ$E_rDt5@{s#c?$5Q|R

literal 0
HcmV?d00001

diff --git a/test/autodispose.dart b/test/autodispose.dart
new file mode 100644
index 0000000..3213ad2
--- /dev/null
+++ b/test/autodispose.dart
@@ -0,0 +1,27 @@
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+  test('doit vérifier que les ressources du Provider sont libérées', () async {
+    // given:
+    final container = ProviderContainer();
+    addTearDown(container.dispose);
+
+    var disposed = false; // 1
+    final provider = Provider.autoDispose<void>((ref) {
+      ref.onDispose(() => disposed = true);
+    });
+
+    // when:
+    container.read(provider); // <2>
+
+    // then:
+    expect(disposed, isFalse); // <3>
+
+    // when:
+    await Future.delayed(const Duration(milliseconds: 1)); // <4>
+
+    // then:
+    expect(disposed, isTrue); // <5>
+  });
+}
diff --git a/test/circle_of_life.dart b/test/circle_of_life.dart
new file mode 100644
index 0000000..180bcd2
--- /dev/null
+++ b/test/circle_of_life.dart
@@ -0,0 +1,37 @@
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+void main() {
+  test('doit vérifier le cycle de vie du Provider', () {
+    const defaultValue = -1;
+
+    // given:
+    final container = ProviderContainer();
+    addTearDown(container.dispose);
+
+    var intValue = defaultValue; // <1>
+    var disposed = false;
+
+    final intProvider = Provider.autoDispose<int>((ref) {
+      ref.onDispose(() => disposed = true);
+      return intValue = 13;
+    });
+
+    // expect:
+    expect(intValue, equals(defaultValue)); // <2>
+    expect(disposed, isFalse);
+
+    // when:
+    container.read(intProvider); // <3>
+
+    // then:
+    expect(intValue, equals(13)); // <4>
+    expect(disposed, isFalse);
+
+    // when:
+    container.dispose(); // <5>
+
+    // then:
+    expect(disposed, isTrue); // <6>
+  });
+}
diff --git a/test/dependance_cyclique.dart b/test/circular_dependency.dart
similarity index 88%
rename from test/dependance_cyclique.dart
rename to test/circular_dependency.dart
index abe30b7..d31408d 100644
--- a/test/dependance_cyclique.dart
+++ b/test/circular_dependency.dart
@@ -9,7 +9,7 @@ final Provider<int> provider = Provider<int>((ref) => ref.watch(otherProvider));
 final Provider<int> otherProvider = Provider<int>((ref) => ref.watch(provider));
 
 void main() {
-  test('doit lever une exception suite à une dépendance cyclique', () {
+  test('doit lever une exception suite à une dépendance circulaire', () {
     // given:
     final container = createContainer();
 
diff --git a/test/family.dart b/test/family.dart
new file mode 100644
index 0000000..b0e0be1
--- /dev/null
+++ b/test/family.dart
@@ -0,0 +1,17 @@
+import 'package:flutter_riverpod/flutter_riverpod.dart';
+import 'package:flutter_test/flutter_test.dart';
+
+import 'utils.dart';
+
+final evenProvider = StateProvider.family<bool, int>((_, arg) => arg.isEven); // <1>
+
+void main() {
+  test('doit distinguer chaque état dans un provider', () {
+    // given:
+    final container = createContainer();
+
+    // then:
+    expect(container.read(evenProvider(13)), isFalse); // <2>
+    expect(container.read(evenProvider(42)), isTrue);
+  });
+}
\ No newline at end of file
diff --git a/test/test_overrides.dart b/test/overrides.dart
similarity index 100%
rename from test/test_overrides.dart
rename to test/overrides.dart
-- 
GitLab