如何复用同一AudioPlayer实例避免重复加载资源?
复用AudioPlayer实例实现重复播放的解决方案
你遇到的问题核心原因是:第一次播放结束后,音频的播放指针停在了文件末尾,再次调用play()不会自动回到起始位置,因此没有声音输出。以下是具体实现方案:
实现思路
- 仅在初始化阶段加载一次音频资源,避免重复加载开销
- 每次触发播放前,将播放位置重置到起始点(0秒处)
- 封装播放逻辑,确保每次调用都能正确触发播放
代码示例
// 类级别或全局的AudioPlayer实例,只初始化一次 AudioPlayer _player = AudioPlayer(); // 初始化方法,在页面/组件启动时调用一次 Future<void> initAudioResource() async { await _player.setAsset("sounds/hit.mp3"); } // 封装的播放方法,每次需要播放时调用这个方法 Future<void> playHitSound() async { // 将播放位置重置到起始点 await _player.seek(Duration.zero); // 执行播放 await _player.play(); }
可选优化:监听播放完成自动重置
如果希望播放结束后自动重置位置,可添加播放完成监听:
// 在初始化方法中添加监听 Future<void> initAudioResource() async { await _player.setAsset("sounds/hit.mp3"); // 播放完成后自动重置到起始位置 _player.onPlayerComplete.listen((_) { _player.seek(Duration.zero); }); }
内容的提问来源于stack exchange,提问作者cppbird
相关产品推荐
相关产品推荐

