Dans mon application Flutter, j'utilise get_it pour récupérer les dépendances non liées aux widgets (par exemple, un service http).

La plupart des exemples Flutter Widget que je vois n'enregistrent aucune variable dans la classe widget, mais les récupèrent plutôt dans la méthode #build. Cela a du sens pour les dépendances qui reposent sur context, mais pour les autres dépendances qui ne reposent pas sur context, est-il correct de les enregistrer en tant que variables d'instance lorsque le constructeur est appelé ?

Je ne connais pas très bien le cycle de vie des widgets, donc je ne sais pas si cela pourrait entraîner des fuites de mémoire, etc. si les instances de widgets sont supprimées. Je veux les enregistrer en tant que variables car cela documente plus clairement les dépendances.

Récupération dans #build

class MyWidget extends StatelessWidget {
  @override
  Widget build() {
    var myService = GetIt.instance.get<MyService>();
  }
}

Stockage dans une variable d'instance

class MyWidget extends StatelessWidget {
  final MyService myService;

  MyWidget(): myService = GetIt.instance.get();

  @override
  Widget build() {

  }
}
0
geg 6 oct. 2020 à 23:16

1 réponse

Meilleure réponse

Je ne vois aucune raison pour laquelle vous ne pourriez pas les stocker en tant que variable d'instance.

Vous ne pouvez évidemment pas supprimer les variables d'instance de manière manuelle/propre et devez compter sur le ramasse-miettes pour faire ce qu'il doit faire. Cela pourrait être vu comme un inconvénient. Dans votre cas, je suppose que ce n'est pas un problème car le service peut vivre tout au long du cycle de vie de l'application.

Si vous êtes très nerveux à propos des fuites de mémoire, utilisez un widget avec état et éliminez les éléments à éliminer.

Si vous souhaitez très clairement documenter les dépendances, vous pouvez aller plus loin et l'exiger en tant que paramètre du widget. Cela rendrait également le widget plus facilement testable.

2
Robert Sandberg 6 oct. 2020 à 20:53