当您通过Android上的“后退”按钮关闭Flutter应用程序时,会出现一些与插件有关的问题。插件的dart / flutter端重新启动,而android部分未重新启动。这会引起麻烦,尤其是在进行诸如音频播放之类的背景活动时。 我认为这是一个关键问题,因此我创建了一个GitHub问题:https://github.com/flutter/flutter/issues/31734
我想采取一种解决方法,因此,如果应用程序通过“后退”按钮关闭,则播放应停止。
我试图通过didChangeAppLifecycleState
方法检测后退按钮的关闭动作。但是我可以确定这是正常的关闭动作还是使用后退按钮。
您可以使用audioplayers插件的示例自己尝试。我还在那里创建了一个新的issue
答案 0 :(得分:1)
您可以使用back_button_interceptor作为中介。
在您的主窗口小部件中:
@override
void initState() {
super.initState();
BackButtonInterceptor.add(myInterceptor);
}
@override
void dispose() {
BackButtonInterceptor.remove(myInterceptor);
super.dispose();
}
bool myInterceptor(bool stopDefaultButtonEvent) {
doYourStuff();
// If you return true, it'll intercept the back button press and your app won't close
return false;
}
在我看来,您无法精确确定是否已通过“后退”按钮关闭了某个应用程序。相反,您可以通过“后退”按钮确定是否要关闭某个应用程序:
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
的结果,包括对话框甚至来自PopupMenu
的{{1}}。