flutter 切换页面时如何正确处理()小部件,并保持使用应用程序栏后退按钮的能力?

0g0grzrc  于 2023-03-24  发布在  Flutter
关注(0)|答案(1)|浏览(121)

我有一个小部件,每隔n秒获取一个新的相机预览图像。
触发build()的定时器设置在dispose()函数中。
这个小部件在我的第一个页面上,当我push()到另一个页面时,计时器会继续运行并在后台获取图像。
一个解决方案是使用pushReplacement(),但我必须自己实现应用程序栏中的所有后退按钮,因为我松开了历史步骤。
看起来deactivate()可以做到这一点,但在2020年的flutter升级(https://github.com/flutter/flutter/issues/50147)后停止工作。
我在这里错过了什么,或者这是处理这种情况的正确方法(使用pushReplacment并自己实现所有后退按钮)。
这里有一个小的示例flutter项目来说明我的“问题”:
https://github.com/vindolin/timerdispose
编辑:现在我注意到这个解决方案只适用于appBar中的后退按钮,但物理Android后退按钮现在关闭了我的应用程序,因为pushReplacement()取代了历史步骤。
编辑:我解决了后续页面关闭应用程序的问题,将它们 Package 成一个WillPopScope

uxhixvfz

uxhixvfz1#

最后,我使用了@DanielPossamai建议的focus_detector包的分叉版本,它似乎工作得很完美。
我的小部件正在观察onVisibilityLost/onVisibilityGained以启动/停止计时器。
在这个分支中,我将默认的updateInterval从500 ms更改为Duration.zero,以使其响应更快:https://github.com/vindolin/focus_detector .

相关问题