使用audio_service与just_audio时如何捕获音频文件URL加载异常
异常捕获与处理方案
1. 主动捕获初始化加载阶段的错误
你调用setAudioSource的时候是异步操作,添加await并套入try-catch即可直接捕获URL无效类的加载错误:
// 位于AudioPlayerHandler初始化逻辑中 try { // 替换为你自己的音频源设置逻辑 await _player.setAudioSource(AudioSource.uri(Uri.parse(你的音频URL))); } catch (err) { // 此处可拿到具体错误信息,同步更新播放状态给上层 playbackState.add(playbackState.value.copyWith( processingState: AudioProcessingState.error, errorMessage: "音频链接无效,加载失败", )); // 可根据需求补充错误处理逻辑:重置播放器、回退到上一级页面等 }
注意:如果不加await,异步抛出的异常无法被当前上下文的try-catch捕获
2. 全局监听所有播放相关错误
给just_audio的AudioPlayer实例绑定错误流监听,所有播放全生命周期的异常(包括加载错误、播放中网络中断、解码失败等)都会从这个流推送,可作为兜底捕获方案避免未处理异常:
// 在AudioPlayer初始化完成后添加监听 _player.errorStream.listen((error) { playbackState.add(playbackState.value.copyWith( processingState: AudioProcessingState.error, errorMessage: error.toString(), )); // 统一处理错误逻辑 });
3. UI层错误提示
上层UI直接监听audio_service的播放状态流,检测到错误状态时弹出提示即可:
AudioService.playbackState.listen((state) { if (state.processingState == AudioProcessingState.error) { ScaffoldMessenger.of(context).showSnackBar( SnackBar(content: Text(state.errorMessage ?? "播放出现异常,请稍后重试")) ); } });
内容的提问来源于stack exchange,提问作者Survy
相关产品推荐
相关产品推荐

