我正在监听一个流,并在屏幕中流完成时调用setState。
当我按下后,屏幕消失了,但在后台它继续工作,最终调用设置状态,并给我以下错误:
[错误:flutter/lib/ui/ui_start_state.cc(157(]未处理的异常:在dispose((之后调用setState((:_HotelPriceScreenState#4ec39(生命周期状态:已失效,未装入(E/flutter(2203(:如果您对不再出现在窗口小部件树中的窗口小部件的State对象调用setState((,就会发生此错误(例如,其父窗口小部件在其构建中不再包含该窗口小部件(。当代码从计时器或动画回调调用setState((时,可能会发生此错误。
E/flutter(2203(:首选解决方案是取消计时器或停止收听dispose((回调中的动画。另一种解决方案是检查";安装";属性,然后调用setState((以确保该对象仍在树中。E/flutter(2203(:如果调用setState((,则此错误可能表示内存泄漏,因为另一个对象在从树中删除后仍保留对此State对象的引用。为了避免内存泄漏,请考虑在dispose((过程中中断对此对象的引用。
如何解决这种情况,并完全停止当前屏幕,使其停止侦听流,并且不会调用setState((。
我真的不确定我是否理解你的问题,但据我所知,flutter给了你一条有用的错误消息。
就像它在错误文本中所说的那样,您可以停止侦听dispose()
中的流(或暂停或关闭它或其他什么(,也可以在调用setState()
之前检查.mounted
值(在我看来,这将是最好的解决方案(。因此,与其立即调用setState()
,不如将setState()
封装在另一个函数中,并在调用setState()
之前返回Widget是否已安装。
我真的希望我能帮忙,请不要太苛刻,这是我的第一篇帖子。