我不知道为什么异步onPressed方法中的2 setState会导致错误
未处理的异常:在dispose()之后调用setState(): _LoginScreenState#0eb2c(生命周期状态:已终止,未安装)
这是我的代码
RaisedButton(
child: Text('Login'),
onPressed: emailController.text == "" || passwordController.text == ""
? null
: () async {
setState(() {
_isLoading = true;
});
SharedPreferences prefs =
await SharedPreferences.getInstance();
prefs.setString('email', emailController.text);
try {
await Provider.of<Auth>(context, listen: false)
.signIn(emailController.text, passwordController.text);
} on HttpException catch (error) {
exceptionAlertDialog(context, error.toString());
} catch (error) {
exceptionAlertDialog(context, error.toString());
}
setState(() {
_isLoading = false;
});
},
)
一旦isLoading为true,我将显示微调器。。没什么特别的
body: Container(
alignment: Alignment.center,
child: _isLoading
? Center(child: CircularProgressIndicator())
: ListView(
children: <Widget>[textSection(), buttonSection()],
),
),
如果我在onPressed按钮中注释掉了这2种设置状态,则一切正常。
答案 0 :(得分:1)
尝试放置isLoading进行处理
@override
void dispose() {
_isLoading = false;
super.dispose();
}