Aku masih membungkus kepala saya sekitar teknik negara-manajemen dalam mengipas dan saya sedikit bingung tentang kapan dan mengapa untuk menggunakan Provider.of<X>
vs Consumer<X>
. Saya mengerti (saya pikir) dari dokumentasi bahwa ketika memilih di antara keduanya Anda akan menggunakan Provider.tika kami ingin akses ke data, tetapi Anda tidak perlu UI untuk berubah. Jadi yang berikut (diambil dari dokumen) mendapatkan akses ke data dan memperbarui UI pada acara baru:
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}');
},
),
),
);
Padahal, di mana kita hanya perlu data pada tidak ingin membangun kembali dengan UI, kami akan menggunakan Provider.of<X>
dengan listen
parameter ditetapkan untuk false
, seperti di bawah ini:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Namun, listen
tidak diperlukan dan hal berikut ini akan berjalan juga:
Provider.of<CartModel>(context).add(item); \\listener optional
Jadi ini membawa saya ke beberapa pertanyaan:
- Apakah ini cara yang benar untuk membedakan
Provider.of<X>
danConsumer<X>
. Mantan tidak memperbarui UI, yang terakhir tidak? - Jika
listen
tidak disetelfalse
apakah widget akan dibangun kembali secara default atau tidak dibangun kembali? Bagaimana jikalisten
diaturtrue
? - Mengapa ada
Provider.of
opsi untuk membangun kembali UI sama sekali saat kita milikiConsumer
?
sumber
Consumer
pada dasarnya tidak lain adalahProvider.of
di widget baru