Ich Einwickeln noch meinen Kopf um State-Management - Techniken in Flattern und bin ein wenig verwirrt darüber , wann und warum verwenden Provider.of<X>
vs. Consumer<X>
. Ich verstehe (glaube ich) aus der Dokumentation, dass Sie bei der Auswahl zwischen diesen beiden Provider.of verwenden würden, wenn wir auf die Daten zugreifen möchten, aber Sie müssen die Benutzeroberfläche nicht ändern. Folgendes (aus den Dokumenten entnommen) erhält Zugriff auf die Daten und aktualisiert die Benutzeroberfläche bei neuen Ereignissen:
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}');
},
),
),
);
Während, wo wir nur die Daten benötigen, die nicht mit der Benutzeroberfläche neu erstellt werden sollen, würden wir sie Provider.of<X>
mit dem folgenden listen
Parametersatz verwenden false
:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Ist listen
jedoch nicht erforderlich und wird daher auch Folgendes ausgeführt:
Provider.of<CartModel>(context).add(item); \\listener optional
Das bringt mich zu ein paar Fragen:
- Ist dies der richtige Weg, um
Provider.of<X>
und zu unterscheidenConsumer<X>
. Ersteres aktualisiert die Benutzeroberfläche nicht, letzteres nicht? - Wenn
listen
nicht festgelegt,false
wird das Widget standardmäßig neu erstellt oder nicht neu erstellt? Was ist, wenn eingestelltlisten
isttrue
? - Warum
Provider.of
mit der Option, die Benutzeroberfläche überhaupt neu zu erstellen, wenn wir habenConsumer
?
quelle
Consumer
im Grunde nichts anderes ist alsProvider.of
in einem neuen Widget