Quando utilizzare Provider.of <X> rispetto al consumatore <X> in Flutter


13

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:

  1. È questo il modo corretto di distinguere Provider.of<X>e Consumer<X>. L'ex non aggiorna l'interfaccia utente, quest'ultimo lo fa?
  2. Se listennon è impostato su false, il widget verrà ricostruito per impostazione predefinita o non ricostruito? Cosa succede se listenè impostato su true?
  3. Perché avere Provider.ofl'opzione di ricostruire l'interfaccia utente quando ne abbiamo Consumer?

Risposte:


17

Non importa Ma per spiegare rapidamente le cose:

Provider.ofè l' unico modo per ottenere e ascoltare un oggetto. Consumer, Selectore tutte le chiamate * ProxyProvider Provider.ofal lavoro.

Provider.ofvs Consumerè una questione di preferenze personali. Ma ci sono alcuni argomenti per entrambi

Provider.of

  • può essere richiamato in tutto il ciclo di vita dei widget, inclusi i gestori di clic e didChangeDependencies
  • non aumenta il rientro

Consumatore

  • consente ricostruzioni di widget più granulari
  • risolve la maggior parte degli abusi di BuildContext

Questo è utile Accetterò questa risposta, soprattutto per gli altri. Ma puoi indicare un riferimento per questa affermazione: "Provider.of è l'unico modo per ottenere e ascoltare un oggetto. Il consumatore, il selettore e tutti i * ProxyProvider chiamano Provider.of per funzionare." Questo non è qualcosa che ho visto nei documenti e mi ha davvero aiutato!
Oprimus,

2
Questo è solo un dettaglio di implementazione di come funziona Consumer / ... Ecco la fonte . Puoi vedere che Consumerpraticamente non è altro che Provider.ofin un nuovo widget
Rémi Rousselet,

Ci sono risorse sull'apprendimento per prevenire l'uso improprio di BuildContext?
吳 強 福
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.