Discussion super intéressante que je découvre à peine ![]()
A propos de dispose()
Cette fonction n’est pas une fonction de dart, mais une fonction de Flutter, et plus précisément de la classe State. Elle ne sera donc disponible que pour les widget de type StatefulWidget. Dans un view model, qui est une classe Dart classique, il n’y a pas de notion de destructeur (fonction appelée automatiquement à la destruction d’un objet pour faire le ménage).
Quand dispose() est-elle appelée ?
Au moment où le widget est retiré de l’écran définitivement. C’est différent du moment où il est masqué par un autre widget.
Exemple :
si j’ai une écran de type liste et un écran de type détails où je navigue après avoir cliqué sur un élément de ma liste.
- Si je suis sur l’écran de détail d’un élément et que je clique sur retour, alors l’écran de détail sera retiré définitivement et je reviendrai sur l’écran de liste.
dispose()sera appelé sur l’objetStatede l’écran de détails - Si je suis sur l’écran de liste et que navigue vers la vue de détail d’un élément, l’écran de liste sera simplement recouvert par celui de détail, et non retiré.
dispose()ne sera pas appelé sur l’écran de liste.
Solutions possibles ?
Voici 2 solutions que tu peux mettre en place en fonction de tes besoins :
- Utiliser des
StatefulWidgetet la fonctiondispose()pour appeler une fonction de nettoyage dans ton view model au moment où leStatete prévient. Mais ça ne marchera que lors de la suppression des écrans et non lorsqu’ils seront recouverts. Note qu’il vaut mieux utiliser cette fonction en parallèle avecinitState()plutôt qu’avec le constructeur de ton viewmodel. - Mettre en place ton propre système depuis ton routeur en prévenant tes view models à chaque fois qu’ils vont être affichés ou masqués. Comme ça tu as 100% du contrôle pour déclencher et arrêter tes chargements. Nous en avons parlé sur les dernières séances de coachings de groupe et j’ai même montré quelques exemples de projets à moi avec cette mécanique.
Et PopScope() ?
Je ne le connais pas et il fait probablement très bien le job. Mais vous connaissez probablement ma tendance à limiter au maximum les dépendances dans mes projets
C’est pour cette raison que je préfère conserver le contrôle au niveau de mon routeur et alléger ainsi mes widgets.