Flutter 如何确保在新建小部件之前调用dispose();s initState()?

Flutter 如何确保在新建小部件之前调用dispose();s initState()?,flutter,Flutter,我想在每次创建和处理小部件时使用几个函数。但是在导航到下一页(另一个小部件)后,我希望应该首先调用上一个小部件的dispose()。然后,调用下一个小部件的initState()。但它不是这样工作的。我导航到下一页,调用该页的initState()。在调用前一个小部件的dispose()之后 如何确保在下一个小部件的initState()之前先调用上一个小部件的dispose()?或者,如果没有dispose(),我如何实现相同的行为?当您从小部件A导航到B时,第一个将在转换完成后完全dispo

我想在每次创建和处理小部件时使用几个函数。但是在导航到下一页(另一个小部件)后,我希望应该首先调用上一个小部件的
dispose()
。然后,调用下一个小部件的
initState()
。但它不是这样工作的。我导航到下一页,调用该页的
initState()
。在调用前一个小部件的
dispose()
之后


如何确保在下一个小部件的
initState()
之前先调用上一个小部件的
dispose()
?或者,如果没有
dispose()
,我如何实现相同的行为?

当您从小部件A导航到B时,第一个将在转换完成后完全
dispose()
。这意味着,在这两者之间,A和B都被呈现,因此,第一个还没有被处置,第二个已经被初始化——这是有道理的,否则在转换时,您将无法同时看到这两个

因此,您应该确保来自小部件B的逻辑不依赖于处理小部件A,并解耦它们之间的依赖关系

也许通过提供您的用例,我可以用更好的方法更新我的答案,以满足您的需求

根据评论进行编辑:

您可以将电话转到:

@override
void deactivate() {
  super.deactivate();
  Wakelock.disable();
}

谢谢你的回答。我的应用程序正在显示一个视频,我想在视频播放期间让设备保持清醒。因此,我在
initState()
中使用了
Wakelock.enable()
,它正在工作。用户导航到其他地方后,我需要使用
wakelock.disable()
禁用wakelock。在我的特殊情况下,用户可以跳到下一个视频。因为我使用同一个小部件来显示视频,所以每次我导航到下一个视频,在
initState()
中,我调用
Wakelock.enable()
,这是完全正常的。但是我还想使用
dispose()
,因为我想使用
Wakelock.disable()
。如果有任何方法可以确保我在下一个小部件调用它的
initState()之前调用
Wakelock.disable()
Wakelock.enable()。反之亦然,因为第一个
initState()
调用
Wakelock.enable()
,而上一个小部件的
dispose()
将调用
Wakelock.disable()。是的,您可以将该调用移动到
deactivate()
而不是
dispose()
,因为它将立即被调用。我已经相应地更新了我的答案。不幸的是,
deactivate()
在下一个小部件的
initState()
确定后仍然调用。您需要另一种方法,将导航器观察器添加到小部件的状态。从那里,您可以重写将在推送或弹出另一个小部件时通知您的方法。