首页 > 解决方案 > 有没有办法检测应用程序是否通过后退按钮关闭?

问题描述

当您通过 Android 上的后退按钮关闭 Flutter 应用时,插件会出现一些问题。插件的 dart/flutter 端重新启动,android 部分没有。这会导致麻烦,尤其是在播放音频等后台活动时。我认为这是一个关键问题,所以我创建了一个 GitHub 问题:https ://github.com/flutter/flutter/issues/31734

我想做一个解决方法,所以如果应用程序通过后退按钮关闭,播放应该会停止。

我试图通过该didChangeAppLifecycleState方法检测后退按钮关闭操作。但是在那里我可以确定它是正常的关闭动作还是使用后退按钮。

您可以使用音频播放器插件的示例自己尝试一下。我还在那里创建了一个新问题

标签: androidflutter

解决方案


在我看来,您无法准确确定应用程序是否已通过后退按钮关闭。相反,您可以使用back_button_interceptor作为中间件来确定应用程序是否将通过后退按钮关闭:

bool myInterceptor(bool stopDefaultButtonEvent) {
  String currentRoute = BackButtonInterceptor.getCurrentNavigatorRouteName(context);

  if (currentRoute == '/home') {
    // Back button has been pressed while you're in the home, so the app is going to close
    doYourStuff();
  }

  return false;
}

当然,您必须实现路由才能实现这一点,但这是我能找到的最精确的方法,因为创建覆盖(并因此覆盖后退按钮操作)的所有内容都会更改 的结果getCurrentNavigatorRouteName,包括对话框甚至PopupMenus from AppBar


推荐阅读