运行 应用程序在后台运行时的功能 |扑
Run function when app is in background | Flutter
我的应用包含一些背景音乐。
我希望能够在用户离开应用程序时将其关闭。
我可以通过使用 WillPopScope
:
部分地做到这一点
Future<bool> _willPopCallback() async {
player.stop();
return true;
}
但这不正确的原因是它仅在用户单击 back-button
而不是 home-button
时起作用。这是一个很大的问题,因为那样音乐将继续在后台播放。
我该如何解决这个问题?
使用 WidgetsBindingObserver
,它在获取 paused/resumed 时提供 Widget 回调。这可以解决你的问题
class MusicWidget extends StatefulWidget {
@override
_MusicWidgetState createState() => _MusicWidgetState();
}
class _MusicWidgetState extends State<MusicWidget> with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
// TODO: implement didChangeAppLifecycleState
super.didChangeAppLifecycleState(state);
if(AppLifecycleState.paused == state) {
/// TODO: Stop music player
}
print(state);
}
@override
Widget build(BuildContext context) {
return Container();
}
}
我的应用包含一些背景音乐。
我希望能够在用户离开应用程序时将其关闭。
我可以通过使用 WillPopScope
:
Future<bool> _willPopCallback() async {
player.stop();
return true;
}
但这不正确的原因是它仅在用户单击 back-button
而不是 home-button
时起作用。这是一个很大的问题,因为那样音乐将继续在后台播放。
我该如何解决这个问题?
使用 WidgetsBindingObserver
,它在获取 paused/resumed 时提供 Widget 回调。这可以解决你的问题
class MusicWidget extends StatefulWidget {
@override
_MusicWidgetState createState() => _MusicWidgetState();
}
class _MusicWidgetState extends State<MusicWidget> with WidgetsBindingObserver {
@override
void initState() {
WidgetsBinding.instance.addObserver(this);
super.initState();
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
// TODO: implement didChangeAppLifecycleState
super.didChangeAppLifecycleState(state);
if(AppLifecycleState.paused == state) {
/// TODO: Stop music player
}
print(state);
}
@override
Widget build(BuildContext context) {
return Container();
}
}