Nous avons donc ajouté ce notificateur de repas préférés et, en fin de compte, le fournisseur de repas préférés.
Nous avons ainsi un exemple plus complexe d'un fournisseur qui ne se contente pas de fournir des données statiques, qui
ne changent pas au fur et à mesure que nous utilisons le fournisseur de repas, mais qui fournit
un objet qui nous permet de modifier les données, ce qui est typiquement le cas d'utilisation le plus
courant.
Et c'est la même approche que je veux maintenant utiliser pour ajouter un fournisseur de filtres, bien que pour ce fournisseur, pour le fournisseur
de filtres, que nous sommes sur le point d'ajouter dans les prochaines conférences, vous verrez que nous allons
en fait faire un pas de plus et construire un fournisseur qui dépend d'un autre fournisseur, comme vous le verrez.
Commençons donc par cela.
Pour cela, j'ajouterai un nouveau fichier dans le dossier providers, le fichier filters provider dot dart.
Dans ce dossier, l'objectif est bien sûr d'ajouter un tel fournisseur de filtres.
Nous devons donc importer à nouveau le pod Flutter river comme nous l'avons fait auparavant dans les autres fichiers de fournisseurs.
Et maintenant dans ce dossier.
Je veux finalement créer un fournisseur de filtres et le stocker dans une variable ou une variable finale ici.
Je ferai de même avec le fournisseur de notifications de l'État, comme nous l'avons fait pour le fournisseur de favoris.
Nous avons également utilisé le fournisseur de notifications de l'État.
Je vais maintenant utiliser le même fournisseur pour implémenter le fournisseur de filtres.
Par conséquent, nous devons à nouveau ajouter une classe, comme nous l'avons fait pour le fournisseur de favoris.
Je vais donc ajouter ici mon notificateur de filtres qui étend le notificateur d'état.
Le notificateur d'état est, comme précédemment, une classe générique qui, en fin de compte, gérera une carte.
Une carte des filtres.
Et pour cela, cette carte, bien sûr, doit avoir des clés de filtrage et des valeurs booléennes.
Passons maintenant aux clés de filtrage que j'ai faites précédemment.
Fournissez-les ici en début de filtre.
Je vais maintenant déplacer cette énumération du début du filtre vers le fichier du fournisseur de filtres afin que toute la
méta-gestion des filtres et toutes les définitions de type pour mes filtres se fassent ici.
Ainsi, j'ai mon enum ici.
J'ai mon filtre ici, donc dans cette définition de carte.
Et bien sûr, pour utiliser ce type de filtre dans d'autres fichiers, il faudra s'assurer d'importer ce fichier de fournisseurs
de filtres dans ces autres fichiers.
Mais c'est quelque chose que je ferai plus tard.
J'ai donc un notificateur de filtres.
Et comme précédemment, pour le notificateur de favoris, nous devons définir un état initial en ajoutant la fonction
constructeur, puis la liste des initialisateurs où nous appelons super et où nous transmettons notre état
initial à la classe mère.
En ce qui concerne le fournisseur de favoris, l'état initial est une liste vide.
Pour le fournisseur de filtres, il doit s'agir d'une carte de filtres où chaque filtre est initialement défini sur false.
Nous avons donc ici un filtre sans gluten réglé sur false, un filtre sans lactose réglé sur false,
la même chose pour le filtre végétarien et bien sûr aussi pour le filtre végétalien.
Voilà donc l'état initial de mon filtre.
Une fois cet état défini, nous pouvons ajouter une méthode qui nous permet de manipuler cet état de manière immuable,
comme vous l'avez appris.
J'ajouterai donc ici une méthode que j'appellerai set, filter et qui me permettra d'obtenir le filtre qui
doit être défini en tant qu'entrée.
Ainsi, une valeur de type filtre permet d'identifier le filtre qui doit être réglé sur une valeur différente.
Ensuite, j'obtiens une valeur booléenne active, qui pourrait être un nom approprié, définissant si ce filtre
est maintenant réglé sur vrai ou faux.
Avec ces données reçues, nous pouvons maintenant mettre à jour l'état.
Comme nous l'avons déjà mentionné, nous devons le faire de manière immuable.
Ainsi, l'accès au filtre d'état comme celui-ci et la définition de la valeur mise à jour ne seraient pas autorisés
parce que nous modifions l'état en mémoire et que cela n'est pas autorisé.
Par conséquent, vous devriez plutôt définir l'état d'une nouvelle carte, qui devrait
finalement être votre ancienne carte avec la clé mise à jour.
Une façon de créer une nouvelle carte est de copier la carte existante et ses paires clé-valeur avec l'opérateur
spread, comme nous l'avons fait pour la liste.
Cela fonctionne également pour les cartes au lieu de cartes.
Il s'agit donc de copier les cartes existantes, les paires clé-valeur dans cette nouvelle carte.
Ensuite, nous pouvons explicitement définir une clé comme ici.
Ce filtre vers une nouvelle valeur est actif.
Cela écrasera donc la paire de valeurs de clé avec le même identifiant de filtre qui a été copié et toutes
les autres paires de valeurs de clé seront conservées avec ce nouveau paramètre.
Nous créons ainsi une nouvelle carte avec les anciennes paires de valeurs de clé et une nouvelle paire de valeurs de clé qui remplace
l'ancienne paire de valeurs de clé pour le même filtre.
C'est essentiellement toute la logique que nous devons ajouter ici pour mettre à jour nos filtres ou, plus précisément, pour
mettre à jour l'un de nos filtres dans cette carte.
Avec cela, nous avons obtenu ce notificateur de filtres et donc maintenant dans ce fournisseur de filtres, nous
voulons retourner une instance de notre notificateur de filtres comme la même logique que précédemment avec le notificateur de favoris.
Et comme précédemment, nous devrions ajouter ces annotations de type générique ici au fournisseur de notificateur d'état pour obtenir
un meilleur support de typage dans les endroits où nous utilisons ce fournisseur.
Il convient de préciser ici que l'on se réfère au notificateur de filtres qui, à la fin, se résoudra
en une carte contenant des filtres et des valeurs booléennes.
Avec papa, nous avons obtenu la version de base du notificateur de filtres et nous pouvons maintenant utiliser cette version dans notre code.
Maintenant, dans le fichier de démarrage de l'onglet, je dois par exemple importer le fournisseur de filtres pour avoir accès à cette énumération.
Depuis que j'ai déplacé cette énumération du fichier de l'écran des filtres vers le fichier du fournisseur des filtres.
Je peux également supprimer l'importation du modèle de repas dans le fichier de démarrage de l'onglet, car nous
n'utilisons plus rien de ce fichier.
Mais d'un autre côté, comme indiqué, je devrais ajouter mon importation aux fournisseurs de filtres pour m'assurer que l'énumération
des filtres est disponible dans ce fichier.
Plus important encore, nous devons aller dans Filters DART et y ajouter une importation
pour ce fournisseur de filtre.
Il y a donc deux fournisseurs et un fournisseur de filtres.
Mais nous devons également ajouter une importation au pod de rivière.
Ainsi pour flutter river pod.
Comme ceci.
Parce qu'avec cette importation ajoutée ici, nous pouvons maintenant connecter les filtres, le widget d'écran à notre fournisseur
et obtenir l'accès à ce fournisseur.
Comme vous l'avez appris, nous remplaçons le widget stateful par le widget consumer stateful fourni par Flutter
River Pod.
Et l'état avec l'état du consommateur est également présent lorsque nous définissons ce type.
Cela fait, nous pouvons utiliser ce mot-clé ref dans l'état de l'écran des filtres pour définir nos filtres.