Flutter audioplayer ^4.1.0:initState每秒复用音频的问题咨询
问题解答
一、你的代码存在这些问题
- 不必要的
setState调用:播放音频不需要触发UI重绘,setState()会导致组件反复重建,消耗不必要的性能,完全可以去掉这层包裹。 - 音频叠加播放风险:如果
sound1.wav的时长超过你设置的widget.time(比如1000毫秒),定时器会在旧音频还没结束时就触发新的播放,导致多个音频同时播放,出现杂音。 - 语法不完整:你提供的代码缺少
Timer.periodic回调的闭合括号和分号,实际运行会报错,完整的回调代码应该是:
_timer = Timer.periodic(Duration(milliseconds: widget.time), (timer) { audioPlayer.play(AssetSource('audios/sound1.wav')); });
- 未处理资源销毁:必须在组件的
dispose()方法中取消定时器并释放AudioPlayer资源,避免内存泄漏:
@override void dispose() { _timer?.cancel(); audioPlayer.dispose(); super.dispose(); }
二、关于AudioCache的play方法
在audioplayer ^4.1.0版本中,AudioCache已经被移除,这个类是旧版(如0.x、1.x)的API。现在播放本地音频直接通过AudioPlayer的play方法配合AssetSource即可,不需要再使用AudioCache,自然也不存在它的play方法了。
内容的提问来源于stack exchange,提问作者Abdusattarov Abdusamad
相关产品推荐
相关产品推荐

