首页 文章

如何在Flutter App中处理onPause / onResume?

提问于
浏览
9

我是Dart / Flutter的新手,想 Build 一个简单的应用程序,其中LinearProgressBar每秒都会更新 .

没有太多的实际代码,我有以下设置工作 .

  • 根据传递的时间计算进度的函数 .

  • 显示进度的LinearProgressBar .

  • 定期计时器每秒重新计算进度并更新进度条 .

  • 我每次调试'tick',重新计算完成 .

一切都按预期工作,但有一个例外 . 当我在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事件?

2 回答

  • 8

    您可以覆盖 WidgetBindingObserver 接口的 didChangeAppLifecycleState 以接收应用生命周期更改的通知 .

    this page中有示例代码

  • 4

    您可以使用SystemChannels中的lifecycle Channels .

    例:

    SystemChannels.lifecycle.setMessageHandler((msg){
      debugPrint('SystemChannels> $msg');
    });
    

    输出:

    I/flutter ( 3672): SystemChannels> AppLifecycleState.paused
    I/flutter ( 3672): SystemChannels> AppLifecycleState.resumed
    

相关问题