Sto ancora confezionamento mia testa intorno tecniche di gestione dello stato in sbattimento e sono un po 'confuso su quando e perché utilizzare Provider.of<X>
vs. Consumer<X>
. Comprendo (penso) dalla documentazione che quando si sceglie tra questi due si utilizzerà Provider.of quando si desidera accedere ai dati, ma non è necessario modificare l'interfaccia utente. Pertanto, quanto segue (tratto dai documenti) ottiene l'accesso ai dati e aggiorna l'interfaccia utente in caso di nuovi eventi:
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}');
},
),
),
);
Considerando che, dove abbiamo solo bisogno dei dati su non vogliamo ricostruire con l'interfaccia utente, useremmo Provider.of<X>
con il listen
parametro impostato su false
, come di seguito:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Tuttavia, listen
non è richiesto e quindi verrà eseguito anche quanto segue:
Provider.of<CartModel>(context).add(item); \\listener optional
Quindi questo mi porta ad alcune domande:
- È questo il modo corretto di distinguere
Provider.of<X>
eConsumer<X>
. L'ex non aggiorna l'interfaccia utente, quest'ultimo lo fa? - Se
listen
non è impostato sufalse
, il widget verrà ricostruito per impostazione predefinita o non ricostruito? Cosa succede selisten
è impostato sutrue
? - Perché avere
Provider.of
l'opzione di ricostruire l'interfaccia utente quando ne abbiamoConsumer
?