我有一个小部件,每隔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
。
1条答案
按热度按时间uxhixvfz1#
最后,我使用了@DanielPossamai建议的focus_detector包的分叉版本,它似乎工作得很完美。
我的小部件正在观察onVisibilityLost/onVisibilityGained以启动/停止计时器。
在这个分支中,我将默认的updateInterval从500 ms更改为Duration.zero,以使其响应更快:https://github.com/vindolin/focus_detector .