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:
Provider.of<X>
et Consumer<X>
. L'ancien ne met pas à jour l'interface utilisateur, le dernier le fait?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
?Provider.of
avec l'option de reconstruire l'interface quand nous avons Consumer
?Ç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
didChangeDependencies