美文网首页Flutter开发圈
setState() called after dispose(

setState() called after dispose(

作者: Songzh | 来源:发表于2019-04-06 22:19 被阅读287次

    报错信息

    ERROR:flutter/shell/common/shell.cc(181)] Dart Error: Unhandled exception:
    setState() called after dispose(): _ShelfState#5b9c1(lifecycle state: defunct, not mounted)
    

    原因

    上面英文大致意思是:在 Flutter 构件树被销毁后仍然执行了 setState 方法改变页面状态。

    实际使用报错场景为:三个 tab,默认展示第一个 tab,点第三个 tab 时报的错。个人认为是 bottomNavigationBar 的 bug,点击第三个 tab,第二个 tab 的生命周期函数 initState 也执行了,这是不符合要求的。

    解决

    解决

    在 setState 之前加一句判断,当前页面是否存在于构件树中,存在赋值,不存在结束操作。

    // mounted 为 true 表示当前页面挂在到构件树中,为 false 时未挂载当前页面
    if (!mounted) {
      return;
    }
    
    setState(() {
      // xxxx
    })
    

    相关文章

      网友评论

        本文标题:setState() called after dispose(

        本文链接:https://www.haomeiwen.com/subject/lxsupqtx.html