J'emballage toujours ma tête autour des techniques de gestion de l' Etat en flottement et je suis un peu confus quand et pourquoi utiliser Provider.of<X>
contre Consumer<X>
. Je comprends (je pense) de la documentation que lorsque vous choisissez entre ces deux, vous utiliseriez Provider.of lorsque nous voulons accéder aux données, mais vous n'avez pas besoin de l'interface utilisateur pour changer. 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 ne veulent pas reconstruire avec l'interface utilisateur, nous utiliserions Provider.of<X>
avec le listen
paramètre défini sur false
, comme ci-dessous:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Cependant, ce listen
n'est pas obligatoire et donc ce qui suit s'exécutera aussi:
Provider.of<CartModel>(context).add(item); \\listener optional
Cela m'amène donc à quelques questions:
- Est-ce la bonne façon de distinguer
Provider.of<X>
etConsumer<X>
. L'ancien ne met pas à jour l'interface utilisateur, le dernier le fait? - S'il
listen
n'est pas défini surfalse
, le widget sera-t-il reconstruit par défaut ou non reconstruit? Et silisten
est réglé surtrue
? - Pourquoi avoir
Provider.of
l'option de reconstruire l'interface utilisateur quand nous l'avonsConsumer
?
la source
Consumer
n'est rien d'autre queProvider.of
dans un nouveau widget