Flutter'da Provider.of <X> ve Tüketici <X> ne zaman kullanılır?


13

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:

  1. Bu ayırt etmek için doğru bir yol mu Provider.of<X>ve Consumer<X>. Eski kullanıcı arayüzünü güncellemez, ikincisi yapar?
  2. Eğer listenolarak ayarlanmamış falseyeniden varsayılan olarak veya değil yeniden inşa edilmesi Widget,? Ya listenayarlanırsa true?
  3. Neden sahip Provider.ofolduğumuzda UI'yi yeniden oluşturma seçeneğiyle Consumer?

Yanıtlar:


17

Önemli değil. Ancak olayları hızlı bir şekilde açıklamak için:

Provider.ofolduğu tek elde ve bir nesne dinlemek için bir yol. Consumer, Selectorve tüm * ProxyProvider Provider.ofçalışma çağrıları .

Provider.ofvs Consumerkişisel tercih meselesidir. Ama her ikisi için de birkaç argüman var

Provider.of

  • tıklama işleyicileri dahil tüm widget yaşam döngüsünde çağrılabilir ve didChangeDependencies
  • girinti arttırmaz

Tüketici

  • daha ayrıntılı widget'ların yeniden oluşturulmasına olanak tanır
  • Çoğu BuildContext yanlış kullanımını çözer

Bu yardımcı olur. Bu yanıtı, özellikle diğerleri için kabul edeceğim. Ancak bu ifade için bir referansa işaret edebilir misiniz: "Provider.of bir nesneyi almanın ve dinlemenin tek yoludur. Tüketici, Seçici ve tüm * ProxyProvider Provider.of dosyasını çalışmaya çağırır." Bu dokümanlarda gördüğüm bir şey değil ve gerçekten bana yardımcı oldu!
Kasım'da Oprimus

2
Bu sadece Tüketici / ... 'nin nasıl çalıştığına dair bir uygulama detayıdır. İşte kaynak . Bunun yeni bir widget'tan Consumerbaşka Provider.ofbir şey olmadığını görebilirsiniz
Rémi Rousselet

BuildContext kötüye kullanımını önlemeyi öğrenme hakkında herhangi bir kaynak var mı?
福 強 福
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.