报错信息
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
})
网友评论