我是Dart / Flutter的新手,想建立一个简单的应用程序,其中LinearProgressBar每秒都会更新。
如果没有太多的实际代码,我可以使用以下设置。
一切都按预期工作,但有一个例外。当我在Android设备的后台移动应用程序时,'tick'会继续打印。
在原生Android上,当触发'onPause'事件时,我会取消定期计时器。
Flutter有类似的东西吗?我能找到的只是'initState'和'dispose'。但是,在将应用程序移动到后台时,不会调用Dispose。
我不希望计时器在后台继续滴答声。
在我的研究中,我发现了这个Stack Overflow问题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
}
它正在运作,但我仍然不满意。
原因是,现在每隔几毫秒而不是每秒一次调用自动收报机回调。在我看来,这似乎是浪费资源(我不需要流畅的动画),...我是否过于复杂的事情?
即使我的用例似乎不需要它,我仍然想知道:
如何自己处理onPause / onResume事件?
答案 0 :(得分:9)
您可以覆盖didChangeAppLifecycleState
界面的WidgetBindingObserver
以接收应用生命周期更改的通知。
答案 1 :(得分:5)
您可以使用lifecycle中的SystemChannels频道。
示例:
SystemChannels.lifecycle.setMessageHandler((msg){
debugPrint('SystemChannels> $msg');
});
输出:
I/flutter ( 3672): SystemChannels> AppLifecycleState.paused
I/flutter ( 3672): SystemChannels> AppLifecycleState.resumed