应用程序在后台运行功能|颤抖

问题描述

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

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

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

解决方法

使用WidgetsBindingObserver可以在小部件被暂停/恢复时提供小部件回调。这样可以解决您的问题

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();
  }
}

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...