当应用程序在后台时运行函数 | 扑

Tob*_* H. 2 background-process audio-player flutter

我的应用程序包含一些背景音乐。我希望能够在用户离开应用程序时将其关闭。我可以通过使用以下方法来部分完成此操作WillPopScope

Future<bool> _willPopCallback() async {
    player.stop();
    return true;
  }
Run Code Online (Sandbox Code Playgroud)

但这不是正确的做法,因为它仅在用户单击 时才起作用back-button,而不是home-button。这是一个很大的问题,因为这样音乐就会一直在后台播放。我该如何解决?

jit*_*555 7

使用WidgetsBindingObserver它在暂停/恢复时提供 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();
  }
}
Run Code Online (Sandbox Code Playgroud)