英文:
Calling setState() on a State object for a widget that no longer appears in the widget tree
问题
我正在创建一个Flutter应用程序,在其中一个类中出现了异常:
未处理的异常:在dispose()之后调用了setState():_DetalleEmailEntranteScreenState#51a48(生命周期状态:不可用,未挂载)
这里是它的initState部分:
@override
void initState() {
// TODO: implement initState
super.initState();
checkSiAdmin();
checkSiComercial();
getEmailUsuarioActual();
// getNombreUsuarioActual();
// getApellidosUsuarioActual();
getImagenUsuarioActual();
getTelUsuarioActual();
getIdUsuarioActual();
getMiGrupoAdministrador();
obtenerAdjuntosEmails();
obtenerDestinatariosEmails();
obtenerBodyEmails();
if (mounted) {
setState(() {
timer = Timer.periodic(Duration(seconds: 2), (Timer t) => refresh());
});
}
}
这里是dispose部分:
@override
void dispose() {
timer.cancel();
super.dispose();
}
我不明白问题出在哪里?
英文:
I am creating a Flutter app, in one of its classes I am getting the exception:
Unhandled Exception: setState() called after dispose(): _DetalleEmailEntranteScreenState#51a48(lifecycle state: defunct, not mounted)
Here yoy have the initState part of it:
@override
void initState() {
// TODO: implement initState
super.initState();
checkSiAdmin();
checkSiComercial();
getEmailUsuarioActual();
// getNombreUsuarioActual();
// getApellidosUsuarioActual();
getImagenUsuarioActual();
getTelUsuarioActual();
getIdUsuarioActual();
getMiGrupoAdministrador();
obtenerAdjuntosEmails();
obtenerDestinatariosEmails();
obtenerBodyEmails();
if (mounted) {
setState(() {
timer = Timer.periodic(Duration(seconds: 2), (Timer t) => refresh());
});
}
}
And here the dispose part of it:
@override
void dispose() {
timer.cancel();
super.dispose();
}
I don´t understand where is the issue?
答案1
得分: 1
> 移除 setState 并尝试使用以下代码:
if (mounted) {
timer = Timer.periodic(Duration(seconds: 2), (Timer t) => refresh());
}
英文:
> Remove setState and try this:
if (mounted) {
timer = Timer.periodic(Duration(seconds: 2), (Timer t) => refresh());
}
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论