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 listenparameter ditetapkan untuk false, seperti di bawah ini:
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Namun, listentidak 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
listentidak disetelfalseapakah widget akan dibangun kembali secara default atau tidak dibangun kembali? Bagaimana jikalistendiaturtrue? - Mengapa ada
Provider.ofopsi untuk membangun kembali UI sama sekali saat kita milikiConsumer?