执行下面的代码时,下面的代码处理底部栏的管理,单击Icons.add
按钮,然后更改底部元素,系统显示以下错误:
错误:
[VERBOSE-2:ui_dart_state.cc(157)]未处理的异常:在dispose()之后调用setState():_HomeViewScreenState#d0762(生命周期状态:已废止,股票代码:跟踪1个股票代码)
如果您在State对象上调用不再出现在窗口小部件树中的窗口小部件(例如,其父窗口小部件不再在其内部版本中包含该窗口小部件),则会发生此错误。当代码从计时器或动画回调中调用setState()
时,会发生此错误。
首选解决方案是取消计时器或停止收听setState()
回调中的动画。另一个解决方案是在调用dispose()
之前检查此对象的“ mount”属性,以确保该对象仍在树中。
如果正在调用setState()
,则此错误可能表示内存泄漏,因为在从树中删除该State对象之后,另一个对象仍保留对该State对象的引用。为避免内存泄漏,请考虑在setState()
期间中断对该对象的引用。
答案 0 :(得分:1)
您需要检查小部件是否已安装。代替直接调用setState
,使用:
if (mounted)
setState(() {});
说明:
当您离开屏幕导航时,将丢弃小部件。因此,您无法在其上致电setState()