Importa para mixins (e por isso também para você )
É um paradigma na estrutura do Flutter chamar o super método ao substituir os métodos do ciclo de vida em a State. É por isso que ainda deactivatetem uma mustCallSuperanotação .
Além disso , alguns mixinesperam que você chame os super métodos desses métodos de ciclo de vida em um ponto específico da função.
Isso significa que você deve seguir a documentação e chamada super.dispose no final do seu disposemétodo porque mixins sobre Stateno quadro esperar que este é o caso.
Por exemplo: TickerProviderStateMixine afirme no final:SingleTickerProviderStateMixin super.dispose
Todos os Tickers devem [...] ser descartados antes de chamar super.dispose ().
Outro exemplo: AutomaticKeepAliveMixinexecuta a lógica em initStatee dispose.
Conclusão
Comece initStatecomsuper.initState e termine disposecomsuper.dispose se quiser estar do lado fácil e seguro, adicionando mixins ao seu State.
Além disso, siga a documentação para outros métodos de ciclo de vida (qualquer método em que você substitua State) porque a estrutura espera que você chame os super métodos, conforme descrito na documentação.
Assim, o seguinte é o que você deve fazer:
void initState() {
super.initState();
//DO OTHER STUFF
}
No entanto, isso realmente não importa State, o que explicarei a seguir e mesmo para mixins, importa apenas para afirmações que julgam o que eu poderia encontrar - para que não afetasse seu aplicativo de produção.
Não importa para State
Penso que as duas respostas anteriores de Pablo Barrera e CopsOnRoad são enganosas, porque a verdade é que isso realmente não importa e você não precisa procurar muito.
As únicas ações que super.initStatee executadas super.disposena Stateprópria classe são asserções e como as assertdeclarações são avaliadas apenas no modo de depuração , isso não importa de todo quando você cria o aplicativo, ou seja, no modo de produção.
A seguir, orientarei você sobre o que fazer super.initStatee o que é, todo o código que será executado quando você não tiver mixins adicionais.super.disposeState
initState
Vejamos exatamente qual código é executado super.initStateprimeiro ( fonte ):
@protected
@mustCallSuper
void initState() {
assert(_debugLifecycleState == _StateLifecycle.created);
}
Como você pode ver, existe apenas uma asserção de ciclo de vida e o objetivo é garantir que seu widget funcione corretamente. Então, enquanto você chama super.initState em algum lugar em seu próprio initState, você verá um AssertionError, se o seu widget não está funcionando como deveria. Não importa se você tomou alguma ação anterior, pois o assertobjetivo é apenas informar que alguma coisa no seu código está errada e você verá isso mesmo se chamar super.initStateno final do seu método.
dispose
O disposemétodo é análogo ( fonte ):
@protected
@mustCallSuper
void dispose() {
assert(_debugLifecycleState == _StateLifecycle.ready);
assert(() {
_debugLifecycleState = _StateLifecycle.defunct;
return true;
}());
}
Como você pode ver, ele também contém apenas asserções que lidam com a verificação do ciclo de vida da depuração . O segundo assertaqui é um bom truque, pois garante que _debugLifecycleStateapenas seja alterado no modo de depuração (pois as assertinstruções são executadas apenas no modo de depuração).
Isso significa que, desde que você chame em super.dispose algum lugar no seu próprio método, você não perderá nenhum valor sem os mixins adicionarem funcionalidade adicional.