Bu mixin
s 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 deactivate
bir mustCallSuper
ek açıklama bile var .
Ayrıca , bazı mixin
iş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: TickerProviderStateMixin
ve sonunda iddia edin:SingleTickerProviderStateMixin
super.dispose
Super.dispose () öğesini çağırmadan önce tüm Tickersların [..] atılması gerekir.
Başka bir örnek: ve AutomaticKeepAliveMixin
mantığını yürütür .initState
dispose
Sonuç
Başlat initState
ilesuper.initState
ve son senin dispose
ilesuper.dispose
eklemeyi kolay ve güvenli tarafta olmak istiyorsanız mixin
adresinden Müşteri s State
.
Ayrıca, diğer yaşam döngüsü yöntemleri (üzerine State
yazdığı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.initState
ve super.dispose
almak State
sı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.initState
ve ne super.dispose
yapacağı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ı initState
gö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.initState
yönteminizin en sonunda arasanız bile bunu göreceksiniz .
dispose
dispose
Yö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 . assert
Burada ikincisi güzel bir hile çünkü _debugLifecycleState
sadece 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 .