我是DART/Ffltter的新手,我想构建一个简单的应用程序,其中LinearProgressBar每秒都会更新.
在不太深入实际代码的情况下,我可以使用以下设置.
- 根据经过的时间计算进度的函数.
- 显示进度的线性进度条.
- 定期计时器,每秒重新计算进度并更新进度条.
- 每次重新计算时,我都会调试打印"Tick".
除了一个例外,一切都按预期进行.当我在Android设备的后台移动应用程序时,"勾号"一直在打印.
在原生安卓系统上,当触发"onPause"事件时,我会取消定期计时器.
Flutter 克也有类似的东西吗?我能找到的只有‘initState’和‘dispose’.但是,在将应用程序移动到后台时,不会调用Dispose.
我不希望计时器在后台一直滴答作响.
在我的研究中,我发现了这个堆栈溢出问题onresume-and-onpause-for-widgets-on-flutter.答案是建议使用TickerProviderStateMixin.
我是这样用的.
class _BarItemState extends State<BarItem> with SingleTickerProviderStateMixin {
Ticker ticker;
num progress = 1.0;
@override
void initState() {
super.initState();
ticker = createTicker((duration) => setState(() {
debugPrint('tick');
progress = duration.inSeconds / 30;
}))
..start();
}
// other stuff omitted
}
它正在发挥作用,但我仍然不满意.
原因是,现在每隔几毫秒就会调用一次ticker回调,而不是每秒调用一次.在我看来,这似乎是浪费资源(我不需要平滑的动画)...我是不是把事情搞得太复杂了?
即使我的用例看起来不需要它,我仍然想知道:
我自己怎么处理onPause/onResume事件?