Hala kafamı çırpınarak devlet yönetimi tekniklerine sarıyorum ve ne zaman ve neden Provider.of<X>vs kullanacağım konusunda biraz kafam karıştı Consumer<X>. Bu ikisi arasında seçim yaparken verilere erişmek istediğimizde Provider.of'u kullanacağınızı, ancak değiştirmek için kullanıcı arayüzüne ihtiyacınız olmadığını (sanırım) belgelerden anlıyorum . Böylece aşağıdakiler (dokümanlardan alınmıştır) verilere erişir ve yeni etkinliklerde kullanıcı arayüzünü günceller:
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}');
},
),
),
);
Bununla birlikte, yalnızca verilere ihtiyaç duyduğumuz yerde, kullanıcı arayüzü ile yeniden oluşturmak istemiyorsak , aşağıdaki gibi ayarlanmış parametre Provider.of<X>ile kullanırız :listenfalse
Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild
Ancak, listenzorunlu değildir ve bu nedenle aşağıdakiler de çalışır:
Provider.of<CartModel>(context).add(item); \\listener optional
Bu da beni birkaç soruya getiriyor:
- Bu ayırt etmek için doğru bir yol mu
Provider.of<X>veConsumer<X>. Eski kullanıcı arayüzünü güncellemez, ikincisi yapar? - Eğer
listenolarak ayarlanmamışfalseyeniden varsayılan olarak veya değil yeniden inşa edilmesi Widget,? Yalistenayarlanırsatrue? - Neden sahip
Provider.ofolduğumuzda UI'yi yeniden oluşturma seçeneğiyleConsumer?