जब प्रदाता का उपयोग करें। Fl में एक्स <एक्स> बनाम उपभोक्ता <एक्स> का उपयोग करें


13

मैं अभी भी स्पंदन में राज्य प्रबंधन तकनीकों के आसपास मेरे सिर लपेटकर रहा हूँ और कर रहा हूँ थोड़ा कब और क्यों का उपयोग करने के बारे में उलझन में Provider.of<X>बनाम Consumer<X>। मैं दस्तावेज़ीकरण से समझता हूं (मुझे लगता है) कि जब हम इन दोनों के बीच चयन करते हैं, तो जब आप डेटा तक पहुंच चाहते हैं, तो आप Provider.of का उपयोग करेंगे, लेकिन आपको UI को बदलने की आवश्यकता नहीं है। तो निम्नलिखित (डॉक्स से लिया गया) डेटा तक पहुंच प्राप्त करता है और नई घटनाओं पर यूआई को अपडेट करता है:

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}');
      },
    ),
  ),
);

जबकि, जहां हमें केवल यूआई के साथ पुनर्निर्माण नहीं करना चाहते हैं, हम नीचे दिए गए पैरामीटर के Provider.of<X>साथ उपयोग करना चाहते हैं :listenfalse

Provider.of<CartModel>(context, listen: false).add(item); \\Widget won't rebuild

हालाँकि, listenआवश्यक नहीं है और इसलिए निम्न भी चलेंगे:

Provider.of<CartModel>(context).add(item); \\listener optional

इसलिए यह मुझे कुछ प्रश्नों के लिए लाता है:

  1. इस भेद करने के लिए सही तरीका है Provider.of<X>और Consumer<X>। पूर्व UI अद्यतन नहीं करता है, बाद करता है?
  2. यदि listenसेट नहीं किया जाता है तो falseक्या विजेट को डिफ़ॉल्ट रूप से फिर से बनाया जाएगा या पुनर्निर्माण नहीं किया जाएगा? क्या होगा अगर listenकरने के लिए सेट है true?
  3. Provider.ofहमारे पास यूआई के पुनर्निर्माण का विकल्प क्यों है Consumer?

जवाबों:


17

इससे कोई फर्क नहीं पड़ता। लेकिन चीजों को तेजी से समझाने के लिए:

Provider.ofकिसी वस्तु को प्राप्त करने और सुनने का एकमात्र तरीका है। Consumer, Selectorऔर सभी * ProxyProvider कॉल Provider.ofकरने के लिए काम करते हैं।

Provider.ofबनाम Consumerव्यक्तिगत प्राथमिकता का मामला है। लेकिन दोनों के लिए कुछ तर्क हैं

Provider.of

  • क्लिकर हैंडल और सहित सभी विगेट्स जीवनचक्र में बुलाए जा सकते हैं didChangeDependencies
  • इंडेंटेशन नहीं बढ़ाता है

उपभोक्ता

  • अधिक दानेदार विगेट्स का पुनर्निर्माण करता है
  • सबसे BuildContext का दुरुपयोग करता है

यह मददगार है। मैं इस प्रतिक्रिया को स्वीकार करने जा रहा हूं, विशेष रूप से दूसरों के लिए। लेकिन क्या आप इस कथन के लिए एक संदर्भ की ओर इशारा कर सकते हैं: "प्रदाता। एक वस्तु प्राप्त करने और सुनने का एकमात्र तरीका है। उपभोक्ता, चयनकर्ता, और सभी * ProxyProvider प्रदाता.ऑफ को काम करने के लिए कहते हैं।" यह ऐसा कुछ नहीं है जिसे मैंने डॉक्स में देखा है और इसने वास्तव में मेरी मदद की है!
ओप्रिमस

2
यह सिर्फ एक कार्यान्वयन विवरण है कि उपभोक्ता / ... कैसे काम करता है। यहाँ स्रोत है । आप देख सकते हैं कि Consumerमूल रूप Provider.ofसे एक नए विजेट में कुछ भी नहीं है
Rémi Rousselet

क्या बिल्डकॉनटेक्स्ट के दुरुपयोग को रोकने के लिए सीखने के बारे में कोई संसाधन हैं?
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.