You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter中使用just_audio实现应用退至后台时停止音频

实现应用退至后台时停止just_audio播放的最简方案

无需额外依赖,直接利用Flutter自带的应用生命周期监听能力即可实现,步骤如下:

  • 让页面的State类混入WidgetsBindingObserver,用于监听应用状态变化
  • 在initState中注册生命周期监听,在dispose中取消监听并释放播放器资源
  • 重写didChangeAppLifecycleState方法,根据应用状态控制播放器停止

代码示例

class MusicPlayerPage extends StatefulWidget {
  const MusicPlayerPage({super.key});

  @override
  State<MusicPlayerPage> createState() => _MusicPlayerPageState();
}

class _MusicPlayerPageState extends State<MusicPlayerPage> with WidgetsBindingObserver {
  late AudioPlayer _audioPlayer;

  @override
  void initState() {
    super.initState();
    _audioPlayer = AudioPlayer();
    // 注册生命周期监听
    WidgetsBinding.instance.addObserver(this);
    // 初始化音频源
    _loadAudioSource();
  }

  Future<void> _loadAudioSource() async {
    await _audioPlayer.setUrl('你的音频文件地址或网络链接');
  }

  @override
  void dispose() {
    // 移除监听
    WidgetsBinding.instance.removeObserver(this);
    // 释放播放器资源
    _audioPlayer.dispose();
    super.dispose();
  }

  @override
  void didChangeAppLifecycleState(AppLifecycleState state) {
    super.didChangeAppLifecycleState(state);
    // 应用退至后台(暂停/非活跃状态)时停止播放
    if (state == AppLifecycleState.paused || state == AppLifecycleState.inactive) {
      _audioPlayer.stop();
    }
    // 可选:应用回到前台时恢复播放,按需开启
    // if (state == AppLifecycleState.resumed) {
    //   _audioPlayer.play();
    // }
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: Center(
        child: Column(
          mainAxisAlignment: MainAxisAlignment.center,
          children: [
            ElevatedButton(
              onPressed: () => _audioPlayer.play(),
              child: const Text('开始播放'),
            ),
            const SizedBox(height: 16),
            ElevatedButton(
              onPressed: () => _audioPlayer.pause(),
              child: const Text('暂停播放'),
            ),
          ],
        ),
      ),
    );
  }
}

这个方案的核心是通过WidgetsBindingObserver监听应用的生命周期状态,当检测到应用进入后台(paused或inactive状态)时,直接调用just_audio播放器的stop()方法终止音频播放,完全不需要引入audio_service或just_audio_background插件。

内容的提问来源于stack exchange,提问作者raphheuhh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.04 15:25:08