Ad

Run Function When App Is In Background | Flutter

- 1 answer

My app contains some background music. I want to be able to shut this off when the user leaves the app. I can do this partially by using WillPopScope:

Future<bool> _willPopCallback() async {
    player.stop();
    return true;
  }

But the reason this isn't the right thing is that it only works when the user clicks on the back-button, not the home-button. And that's quite a problem, because then the music will keep playing in the background. How do I fix this?

Ad

Answer

Use WidgetsBindingObserver which provides Widget callback when its getting paused/resumed. This can solve your problem

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();
  }
}
Ad
source: stackoverflow.com
Ad