এটা তোলে জন্য ব্যাপার mixin
গুলি (এবং যে কারণে তোমার জন্য পাশাপাশি)
এ-তে লাইফাইসাইক্যাল পদ্ধতিগুলি ওভাররাইড করার সময় সুপার পদ্ধতিটি কল করা এটি ঝাঁকুনির কাঠামোর একটি দৃষ্টান্তState
। এ কারণেই এমনকি deactivate
একটি mustCallSuper
টীকাও রয়েছে ।
অধিকন্তু , কিছু লোক mixin
আশা করে যে আপনি সেই লাইফাইকাইকেল পদ্ধতিগুলির সুপার পদ্ধতিগুলিকে ফাংশনের একটি নির্দিষ্ট সময়ে কল করবেন।
এর অর্থ আপনি ডকুমেন্টেশন এবং কল অনুসরণ করা উচিত super.dispose
শেষে আপনার এর dispose
পদ্ধতি কারণ mixin
উপর গুলি State
কাঠামোর মধ্যে আশা যে এই ক্ষেত্রে দেখা যায়।
উদাহরণস্বরূপ: TickerProviderStateMixin
এবং শেষে জোর দিন :SingleTickerProviderStateMixin
super.dispose
সুপার.ডিসপোজ () কল করার আগে সমস্ত টিকিটকে অবশ্যই নিষ্পত্তি করতে হবে [..]।
আর একটি উদাহরণ: AutomaticKeepAliveMixin
লজিক ইন initState
এবং কার্যকর করে dispose
।
উপসংহার
আপনার initState
সাথে শুরু করুনsuper.initState
এবং আপনার dispose
সাথেsuper.dispose
সহজ এবং নিরাপদ দিকে থাকতে চাইলে আপনার সাথে শেষmixin
করুন State
।
তদ্ব্যতীত, অন্যান্য আজীবন পদ্ধতিগুলির জন্য ডকুমেন্টেশনগুলি অনুসরণ করুন (যে পদ্ধতি আপনি ওভাররাইট করেছেন তাতে State
) কারণ কাঠামোটি আশা করবে যে আপনি ডকুমেন্টেশনে বর্ণিত হিসাবে সুপার পদ্ধতিগুলি কল করবেন।
সুতরাং, নিম্নলিখিতটি আপনার করা উচিত:
void initState() {
super.initState();
//DO OTHER STUFF
}
যাইহোক, এটি সত্যিকার অর্থে কোনও বিষয় নয় State
, যা আমি নিম্নলিখিত এবং এমনকি মিক্সিনগুলির জন্য ব্যাখ্যা করব, এটি কেবলমাত্র আমি যা খুঁজে পেতে পারি তার থেকে বিচার করার জন্য গুরুত্বপূর্ণ - তবে এটি আপনার প্রোডাকশন অ্যাপটিকে প্রভাবিত করবে না।
এটা কোন ব্যাপার না State
আমি মনে করি যে থেকে আগের দুটি উত্তর পাবলো Barrera এবং CopsOnRoad হয় বিভ্রান্তিকর কারণ বিষয়টি সত্য যে এটা সত্যিই কোন ব্যাপার না এবং আপনি পর্যন্ত সন্ধান করতে হবে না।
শুধুমাত্র যে সমস্ত কর্ম super.initState
এবং super.dispose
গ্রহণ State
বর্গ নিজেই হয় গবেষকেরা এবং যেহেতু assert
-statements শুধুমাত্র বিশেষভাবে মূল্যায়ন করা হয় ডিবাগ মোড , তাই না ব্যাপার সব একবার বিল্ড আপনার অ্যাপ এ, অর্থাত প্রকাশনা মোডে আছে।
নিম্নলিখিত, আমি কি আপনি মাধ্যমে পথ প্রদর্শন করবে super.initState
এবং super.dispose
না State
যা সব কোডটি মৃত্যুদন্ড কার্যকর করা হবে কোন অতিরিক্ত mixins আছে হয়।
initState
আসুন আমরা super.initState
প্রথমে ( উত্স ) কোডটি কার্যকর করা হয় তা দেখতে দিন :
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
আপনি দেখতে পাচ্ছেন, কেবলমাত্র একটি লাইফসাইकल দৃ as়তা রয়েছে এবং এটির উদ্দেশ্যটি আপনার উইজেটটি সঠিকভাবে কাজ করে তা নিশ্চিত করা। সুতরাং যতক্ষণ আপনি নিজের super.initState
জায়গায় অন্য কোথাও কল initState
করবেন, AssertionError
আপনার উইজেট যদি ইচ্ছা অনুযায়ী কাজ না করে তবে আপনি দেখতে পাবেন । আপনি কিছু প্রাক্কলিত পদক্ষেপ নিয়েছেন কিনা তা বিবেচ্য নয় কারণ assert
কেবলমাত্র আপনার কোডের কিছু যে কোনওভাবেই ভুল বলে প্রতিবেদন করার জন্য এটি বোঝানো হয়েছে এবং আপনি যদি দেখেন যে আপনি super.initState
আপনার পদ্ধতির একেবারে শেষে কল করেছেন এমনকি if
dispose
dispose
পদ্ধতি অনুরূপ (হয় উৎস ):
@protected
@mustCallSuper
void dispose() {
assert(_debugLifecycleState == _StateLifecycle.ready);
assert(() {
_debugLifecycleState = _StateLifecycle.defunct;
return true;
}());
}
আপনি দেখতে পাচ্ছেন, এটিতে কেবলমাত্র এমন দাবি রয়েছে যা ডিবাগ লাইফাইসাইকেল চেকিং পরিচালনা করে। দ্বিতীয়টি assert
এখানে একটি দুর্দান্ত কৌশল কারণ এটি নিশ্চিত করে যে এটি _debugLifecycleState
কেবলমাত্র ডিবাগ মোডে পরিবর্তিত হয়েছে (যেমন- assert
স্ট্যাটমেন্টগুলি কেবলমাত্র ডিবাগ মোডে কার্যকর করা হয়)।
এর অর্থ হ'ল যতক্ষণ আপনি নিজের পদ্ধতিতে super.dispose
কোথাও কল করবেন ততক্ষণ আপনি অতিরিক্ত কার্যকারিতা যুক্ত না করে মিক্সিন ছাড়া কোনও মান হারাবেন না।