Bu mixins için önemli (ve bu yüzden sizin için de)
Flutter çerçevesindeki a . Yaşam döngüsü yöntemlerini geçersiz kılarken süper yöntemi çağırmak bir paradigmadırState . Bu yüzden deactivatebir mustCallSuperek açıklama bile var .
Ayrıca , bazı mixinişlevlerde belirli bir noktada bu yaşam döngüsü yöntemleri süper yöntemleri çağırmak bekliyoruz.
Eğer dokümantasyon ve çağrıyı takip etmesi gerektiği Bu araçlar super.dispose sonunda sizin içinde disposeçünkü yöntemine mixinüzerinde lar Stateçerçevesinde bu olup bekliyoruz.
Örneğin: TickerProviderStateMixinve sonunda iddia edin:SingleTickerProviderStateMixin super.dispose
Super.dispose () öğesini çağırmadan önce tüm Tickersların [..] atılması gerekir.
Başka bir örnek: ve AutomaticKeepAliveMixinmantığını yürütür .initStatedispose
Sonuç
Başlat initStateilesuper.initState ve son senin disposeilesuper.dispose eklemeyi kolay ve güvenli tarafta olmak istiyorsanız mixinadresinden Müşteri s State.
Ayrıca, diğer yaşam döngüsü yöntemleri (üzerine Stateyazdığınız herhangi bir yöntem ) için belgeleri izleyin, çünkü çerçeve, belgede açıklandığı gibi süper yöntemleri çağırmanızı bekler.
Böylece, aşağıdakileri yapmanız gerekir:
void initState() {
super.initState();
//DO OTHER STUFF
}
Ancak, gerçekten önemli değil State, aşağıda açıklayacağım ve mixins için bile, sadece ne bulabileceğimi değerlendiren iddialar için önemlidir - bu yüzden üretim uygulamanızı etkilemez.
Önemli değil State
Ben önceki iki cevabı olduğunu düşünüyorum Pablo Barrera ve CopsOnRoad edilir yanıltıcı işin gerçeği bu gerçekten önemli değildir ve uzağa bakmasına gerek kalmamasıdır çünkü.
Sadece eylemler super.initStateve super.disposealmak Statesınıfın kendisi olan iddialar ve o zamandan beri assert-statements sadece değerlendirilir ayıklama modunda , bu üretim modunda, yani bütün yapı bir kez uygulamanızı önemli değil.
Aşağıda, ek bir karışımınız olmadığında yürütülecek tüm kod olan ne super.initStateve ne super.disposeyapacağınız konusunda size rehberlik edeceğim State.
initState
super.initStateİlk olarak hangi kodun yürütüldüğüne bakalım ( kaynak ):
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
Gördüğünüz gibi, yalnızca bir yaşam döngüsü iddiası var ve bunun amacı, widget'ınızın doğru şekilde çalışmasını sağlamaktır. Kendi başınıza bir super.initState yerde aradığınız sürece , widget'ınızın amaçlandığı gibi çalışıp çalışmadığını initStategöreceksiniz AssertionError. Önceden bir eylemde bulunmuş olmanız önemli değildir assert, çünkü kodunuzdaki bir şeyin zaten yanlış olduğunu bildirmek içindir ve super.initStateyönteminizin en sonunda arasanız bile bunu göreceksiniz .
dispose
disposeYöntemi (benzerdir kaynak ):
@protected
@mustCallSuper
void dispose() {
assert(_debugLifecycleState == _StateLifecycle.ready);
assert(() {
_debugLifecycleState = _StateLifecycle.defunct;
return true;
}());
}
Gördüğünüz gibi, yalnızca hata ayıklama yaşam döngüsü denetimini işleyen iddialar da içerir . assertBurada ikincisi güzel bir hile çünkü _debugLifecycleStatesadece hata ayıklama modunda değiştirilmesini sağlar (çünkü assert-statements sadece hata ayıklama modunda yürütülür).
Bu , kendi yönteminizde bir super.dispose yerde aradığınız sürece, ek işlevsellik ekleyerek mixins olmadan hiçbir değer kaybetmeyeceğiniz anlamına gelir .