Flutter开发圈

setState() called after dispose(

2019-04-06  本文已影响287人  Songzh

报错信息

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
})
上一篇下一篇

猜你喜欢

热点阅读