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 listenparametro impostato su false, come di seguito:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Tuttavia, listennon è 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
listennon è impostato sufalse, il widget verrà ricostruito per impostazione predefinita o non ricostruito? Cosa succede selistenè impostato sutrue? - Perché avere
Provider.ofl'opzione di ricostruire l'interfaccia utente quando ne abbiamoConsumer?