英文:
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());
    }
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论