Вы должны прислушиваться к своему TextEditingController
для каждого изменения.
@override
void initState() {
emailController.addListener(setLoginButtonStyle);
passwordController.addListener(setLoginButtonStyle);
super.initState();
}
@override
void dispose() {
emailController.dispose();
passwordController.dispose();
super.dispose();
}
void setLoginButtonStyle(){
if(emailController.text != '' && passwordController.text != ''){
this.loginButtonStyle = buttonPrimary;
loginDisabled = false;
} else {
this.loginButtonStyle = buttonDisabled;
loginDisabled = true;
}
setState(() {
});
}
Также вы можете удалить эту строку setLoginButtonStyle (); из вашего build
метода
Сервлеты получают событие жизненного цикла при инструктировании для закрытий. Можно использовать это событие для остановки контрольного Потока. Таким образом, когда сервлет запускается, init()
метод называют. Когда это останавливается, destroy()
метод называют.
Переопределите destroy()
метод в Вашем сервлете и остановке поток там.
Когда Вы звоните shutdown.sh
целая JVM закрывается. Поскольку JVM останавливается, все потоки (независимо от того, что их состояние) насильственно останавливаются при тихом выполнении. Это - логический эквивалент вызова System.exit(0);