在状态对象上为小部件调用setState()

时间:2020-06-24 08:21:17

标签: flutter dart

执行下面的代码时,下面的代码处理底部栏的管理,单击Icons.add按钮,然后更改底部元素,系统显示以下错误:

错误:

[VERBOSE-2:ui_dart_state.cc(157)]未处理的异常:在dispose()之后调用setState():_HomeViewScreenState#d0762(生命周期状态:已废止,股票代码:跟踪1个股票代码)

如果您在State对象上调用不再出现在窗口小部件树中的窗口小部件(例如,其父窗口小部件不再在其内部版本中包含该窗口小部件),则会发生此错误。当代码从计时器或动画回调中调用setState()时,会发生此错误。

首选解决方案是取消计时器或停止收听setState()回调中的动画。另一个解决方案是在调用dispose()之前检查此对象的“ mount”属性,以确保该对象仍在树中。

如果正在调用setState(),则此错误可能表示内存泄漏,因为在从树中删除该State对象之后,另一个对象仍保留对该State对象的引用。为避免内存泄漏,请考虑在setState()期间中断对该对象的引用。

Flutter Code

Flutter Code HomeState

1 个答案:

答案 0 :(得分:1)

您需要检查小部件是否已安装。代替直接调用setState,使用:

if (mounted)
    setState(() {});

说明: 当您离开屏幕导航时,将丢弃小部件。因此,您无法在其上致电setState()