यह mixin
s के लिए मायने रखता है (और उसके कारण आपके लिए भी)
सुपरचक्र पद्धति को कॉल करने के लिए फ़्लटर ढांचे में यह एक प्रतिमान है जब जीवनचक्र के तरीकों को ओवरराइडिंग ए State
। यही कारण है कि deactivate
एक mustCallSuper
एनोटेशन भी है ।
इसके अतिरिक्त , कुछ लोग mixin
अपेक्षा करते हैं कि आप फ़ंक्शन में किसी विशेष बिंदु पर उन जीवनचक्र विधियों के सुपर तरीकों को कॉल करें।
इसका मतलब है कि आप दस्तावेज और कॉल का पालन करना चाहिए super.dispose
अंत में अपने की dispose
विधि क्योंकि mixin
पर रों State
ढांचे में उम्मीद करते हैं कि यह मामला है।
उदाहरण के लिए: TickerProviderStateMixin
और अंत में मुखर :SingleTickerProviderStateMixin
super.dispose
सभी टीकरों को सुपर .ispose () कॉल करने से पहले निपटाया जाना चाहिए।
एक और उदाहरण: AutomaticKeepAliveMixin
में तर्क निष्पादित करता है initState
और dispose
।
निष्कर्ष
अपने शुरू initState
के साथsuper.initState
और अंत अपने dispose
साथsuper.dispose
यदि आप जोड़ने आसान और सुरक्षित पक्ष पर होना चाहते हैं mixin
अपने को रों State
।
इसके अलावा, अन्य जीवनचक्र विधियों (किसी भी विधि को आप अधिलेखित करें State
) के लिए प्रलेखन का पालन करें क्योंकि फ्रेमवर्क यह अपेक्षा करेगा कि आप प्रलेखन में वर्णित सुपर तरीकों को कॉल करें।
इस प्रकार, निम्नलिखित आपको क्या करना चाहिए:
void initState() {
super.initState();
//DO OTHER STUFF
}
हालांकि, यह वास्तव में मायने नहीं रखता है State
, जिसे मैं निम्नलिखित में और यहां तक कि मिक्सिन्स के लिए भी समझाऊंगा, यह केवल उन चीजों को देखते हुए मायने रखता है जो मुझे मिल सकता है - इसलिए यह आपके उत्पादन ऐप को प्रभावित नहीं करेगा।
इसके लिए कोई फर्क नहीं पड़ता State
मुझे लगता है कि पिछले दो जवाब पाब्लो बरेरा और CopsOnRoad कर रहे हैं गुमराह क्योंकि इस मामले की सच्चाई यह है कि यह वास्तव में कोई फर्क नहीं पड़ता और आप अब तक देखने की जरूरत नहीं है।
केवल कक्षा में ही होने वाली क्रियाएँ super.initState
और दावे हैं क्योंकि -statements का केवल डिबग मोड में मूल्यांकन किया जाता है , यह आपके ऐप के निर्माण के समय यानी उत्पादन मोड में बिल्कुल भी मायने नहीं रखता है।super.dispose
State
assert
निम्नलिखित में, मैं आपको क्या super.initState
और क्या super.dispose
करना है State
, के माध्यम से मार्गदर्शन करेगा , जो कि सभी कोड हैं जिन्हें तब निष्पादित किया जाएगा जब आपके पास कोई अतिरिक्त मिश्रण नहीं होगा।
initState
आइए देखें कि super.initState
पहले ( स्रोत ) में किस कोड को निष्पादित किया गया है :
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
जैसा कि आप देख सकते हैं, केवल एक जीवन चक्र है और इसका उद्देश्य यह सुनिश्चित करना है कि आपका विजेट सही तरीके से काम करे। तो जब तक आप अपने आप में super.initState
कहीं कॉल करते हैं initState
, तब तक आप देखेंगे AssertionError
कि आपका विजेट उद्देश्य के अनुसार काम नहीं कर रहा है। इससे कोई फर्क नहीं पड़ता कि आपने कुछ पूर्व कार्रवाई की है क्योंकि assert
केवल रिपोर्ट करने के लिए है कि आपके कोड में कुछ भी गलत है और आप देखेंगे कि भले ही आप super.initState
अपने तरीके के अंत में कॉल करें ।
dispose
dispose
विधि अनुरूप (है स्रोत ):
@protected
@mustCallSuper
void dispose() {
assert(_debugLifecycleState == _StateLifecycle.ready);
assert(() {
_debugLifecycleState = _StateLifecycle.defunct;
return true;
}());
}
जैसा कि आप देख सकते हैं, इसमें केवल डीबग जीवनचक्र की जाँच करने वाले निबंध शामिल हैं । यहाँ दूसरी assert
एक अच्छी चाल है क्योंकि यह सुनिश्चित करती है कि इसे _debugLifecycleState
केवल डिबग मोड में बदल दिया जाए (क्योंकि assert
-स्टेटमेंट केवल डीबग मोड में निष्पादित होते हैं)।
इसका मतलब है कि जब तक आप अपनी खुद की विधि में super.dispose
कहीं भी कॉल करते हैं, तब तक आप अतिरिक्त कार्यक्षमता जोड़े बिना मिक्सिन के किसी भी मूल्य को नहीं खोएंगे।