web-dev-qa-db-fra.com

Quand utiliser Provider.of <X> contre Consumer <X> dans Flutter

J'enroule toujours ma tête autour des techniques de gestion des états dans le flottement et je suis un peu confus quant au moment et pourquoi utiliser Provider.of<X> contre. Consumer<X>. Je comprends (je pense) de la documentation que lorsque vous choisissez entre ces deux, vous utiliserez Provider.of lorsque nous voulons accéder aux données, mais vous n'avez pas besoin de changer l'interface utilisateur. Ainsi, les éléments suivants (extraits des documents) ont accès aux données et mettent à jour l'interface utilisateur sur les nouveaux événements:

return HumongousWidget(
  // ...
  child: AnotherMonstrousWidget(// <- This widget will rebuild on new data events
    // ...
    child: Consumer<CartModel>(
      builder: (context, cart, child) {
        return Text('Total price: ${cart.totalPrice}');
      },
    ),
  ),
);

Alors que, lorsque nous n'avons besoin que des données sur, nous ne voulons pas reconstruire avec l'interface utilisateur, nous utilisons Provider.of<X> avec le paramètre listen défini sur false, comme ci-dessous:

Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild

Cependant, listen n'est pas requis et les opérations suivantes s'exécuteront donc également:

Provider.of<CartModel>(context).add(item); \\listener optional

Cela m'amène donc à quelques questions:

  1. Est-ce la bonne façon de distinguer Provider.of<X> et Consumer<X>. L'ancien ne met pas à jour l'interface utilisateur, le dernier le fait?
  2. Si listen n'est pas défini sur false le widget sera-t-il reconstruit par défaut ou non reconstruit? Que faire si listen est défini sur true?
  3. Pourquoi Provider.of avec l'option de reconstruire l'interface quand nous avons Consumer?
9
Oprimus

Ça n'a pas d'importance. Mais pour expliquer les choses rapidement:

Provider.of est la manière niquement d'obtenir et d'écouter un objet. Consumer, Selector, et tous les * appels ProxyProvider Provider.of travailler.

Provider.of vs Consumer est une question de préférence personnelle. Mais il y a quelques arguments pour les deux

Provider.of

  • peut être appelé dans tout le cycle de vie des widgets, y compris les gestionnaires de clics et didChangeDependencies
  • n'augmente pas le retrait

Consommateur

  • permet de reconstruire des widgets plus granulaires
  • résout la plupart des utilisations abusives de BuildContext
11
Rémi Rousselet