停用和处置之间的区别?
Posted
技术标签:
【中文标题】停用和处置之间的区别?【英文标题】:Difference Between Deactivate and Dispose? 【发布时间】:2019-10-16 15:22:27 【问题描述】:在 Flutter 中,StatefulWidget 有dispose()
和deactivate()
。它们有何不同?
【问题讨论】:
【参考方案1】:停用:
从树中删除对象时调用。在某些情况下,框架会将 State 对象重新插入到树的另一部分(例如,如果包含此 State 对象的子树从树中的一个位置移植到另一个位置)。 source
处置:
当此对象从树中永久移除时调用。 source
通过理解这两个句子,您会看到对于从树中移除的小部件,暂时或永久会调用 deactivate,而 仅会调用 dispose用于永久删除的小部件。
感谢 Antonio Oliveira 提供链接,现在我明白了。
【讨论】:
简而言之,当State
由于使用GlobalKey
而从子树A中移除并重新插入到子树B中时,只会调用deactivate()
生命周期方法,dispose()
是未调用(因此,State
只是被停用但在这种情况下未被处置)。当 State
从树中永久删除时,首先调用 deactivate()
,然后再调用 dispose()
。【参考方案2】:
dispose
是确定的。 deactivate
不是。
deactivate
在小部件可能被释放时被调用。但这不能保证。
调用deactivate
但不调用dispose
的典型情况是使用GlobalKey
在小部件树中移动小部件时。
【讨论】:
这个有来源吗?谢谢 @BenButterworth this is the link for the deactivate method 和 this is the dispose method以上是关于停用和处置之间的区别?的主要内容,如果未能解决你的问题,请参考以下文章