Ja nadal zawijania moja głowa wokół stan techniki zarządzania w trzepotanie i jestem nieco mylić o tym, kiedy i dlaczego używać Provider.of<X>Vs. Consumer<X>. Rozumiem (myślę) z dokumentacji, że wybierając między tymi dwoma, użyłbyś Provider.of, kiedy chcemy dostępu do danych, ale nie potrzebujesz interfejsu użytkownika do zmiany. Tak więc następujące elementy (zaczerpnięte z dokumentów) uzyskują dostęp do danych i aktualizują interfejs użytkownika w przypadku nowych zdarzeń:
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}');
},
),
),
);
Podczas gdy tam, gdzie potrzebujemy tylko danych, nie chcemy odbudowywać z interfejsem użytkownika, użylibyśmy Provider.of<X>z listenustawionym parametrem false, jak poniżej:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Nie listenjest to jednak wymagane, więc uruchomione zostaną również następujące elementy:
Provider.of<CartModel>(context).add(item); \\listener optional
To prowadzi mnie do kilku pytań:
- Czy to właściwy sposób na rozróżnienie
Provider.of<X>iConsumer<X>. Dawniej nie aktualizuje interfejsu użytkownika, a później robi? - Jeśli
listennie jest ustawiony, tofalseczy widget zostanie odbudowany domyślnie czy nie? Co jeślilistenjest ustawiony natrue? - Dlaczego
Provider.ofw ogóle mamy opcję przebudowania interfejsu użytkownikaConsumer?