Flutter中如何向PageManager类传递自定义音频URL字符串?
实现方法
第一步:修改PageManager类,支持传入自定义音频路径
删掉原类中静态常量url的定义,调整构造函数支持传参,修改后的代码如下:
class PageManager { final progressNotifier = ValueNotifier<ProgressBarState>( ProgressBarState( current: Duration.zero, buffered: Duration.zero, total: Duration.zero, ), ); final buttonNotifier = ValueNotifier<ButtonState>(ButtonState.paused); late AudioPlayer _audioPlayer; // 替换原静态常量为实例变量,支持外部传入,可自行设置默认兜底地址 final String audioUrl; // 构造函数增加必填audioUrl参数,也可设置可选默认值兼容原有逻辑 PageManager({required this.audioUrl}) { _init(); } void _init() async { _audioPlayer = AudioPlayer(); // 注意:如果传入的是本地文件路径,需要把setUrl换成setFilePath方法 await _audioPlayer.setUrl(audioUrl); } // 可选:如果需要运行中动态切换音频,新增这个公开方法 Future<void> updateAudio(String newUrl) async{ await _audioPlayer.stop(); await _audioPlayer.setUrl(newUrl); // 重置进度状态 progressNotifier.value = ProgressBarState( current: Duration.zero, buffered: Duration.zero, total: Duration.zero, ); buttonNotifier.value = ButtonState.paused; } }
第二步:在应用主页传入你的自定义路径
在主页初始化PageManager的时候,把_current?.path传入即可,示例代码如下:
// 主页中初始化PageManager的位置 late PageManager _pageManager; @override void initState() { super.initState(); // 传入你的路径,注意做空安全处理,避免空值报错 String? audioPath = _current?.path; // 可以自己设置一个兜底地址,或者做空判断处理 assert(audioPath != null, '音频路径不能为空'); _pageManager = PageManager(audioUrl: audioPath!); }
注意事项
- 如果你传入的
_current?.path是本地文件存储路径,不是网络url,需要把_init方法里的await _audioPlayer.setUrl(audioUrl);替换为await _audioPlayer.setFilePath(audioUrl);,否则音频无法正常加载 - 如果需要在应用运行过程中动态更换音频,直接调用PageManager的
updateAudio方法传入新路径即可
内容的提问来源于stack exchange,提问作者Meggy
相关产品推荐
相关产品推荐

