Я до сих пір обгортання мою голову навколо методів державно-управління в тріпотіння , і я трохи заплутався про те, коли і чому використовувати Provider.of<X>
VS. Consumer<X>
. Я розумію (я думаю) з документації, що, вибираючи між цими двома, ви б користувалися Provider.of, коли ми хочемо отримати доступ до даних, але інтерфейс користувача вам не потрібно змінювати. Отже, наступне (взято з документів) отримує доступ до даних та оновлює інтерфейс користувача щодо нових подій:
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}');
},
),
),
);
Беручи під увагу, де ми потрібні тільки дані про не хочете відновити з UI, ми будемо використовувати Provider.of<X>
з listen
набором параметрів до false
, як показано нижче:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Однак listen
це не потрібно, тому буде запущено і наступне:
Provider.of<CartModel>(context).add(item); \\listener optional
Отже, це підводить мене до кількох питань:
- Це правильний спосіб розрізнити
Provider.of<X>
іConsumer<X>
. Колишній не оновлює інтерфейс користувача, останній робить? - Якщо
listen
не встановленоfalse
, віджет буде відремонтовано за замовчуванням чи не буде перебудовано? Що робити, якщоlisten
встановленоtrue
? - Чому взагалі
Provider.of
є можливість відновити інтерфейс, коли у нас єConsumer
?