Flutter中Just_Audio播放资源文件无法识别文件更新问题求助
解决Just_Audio更新音频文件后仍播放旧内容的问题
问题根源
Flutter的Asset资源是在构建阶段打包进应用包的,你手动替换本地源文件后,没有触发重新打包,旧的音频文件还留在构建缓存里;另外just_audio对Asset路径可能存在内部缓存,导致读取不到新文件。
实用解决办法
彻底重建应用
替换音频文件后,别用热重载/热重启,直接执行flutter clean清理构建缓存,再重新flutter run,这样新的音频文件会被重新打包到应用里,就能播放最新内容了。临时修改文件名规避缓存
如果不想每次都clean重建,可以临时改下音频文件名(比如把102.mp3改成102_v2.mp3),同时更新代码里的路径,这样just_audio会识别成新文件,绕过路径缓存。改用本地文件路径替代Asset
要是你需要频繁更新音频,建议把文件放到应用的本地存储目录(用getApplicationDocumentsDirectory()获取路径),用setFilePath()代替setAsset(),这样更新文件后直接读最新的本地文件,完全不受Asset打包限制:import 'package:path_provider/path_provider.dart'; // ... final storageDir = await getApplicationDocumentsDirectory(); final audioFilePath = '${storageDir.path}/words/1/102.mp3'; AudioPlayer player = AudioPlayer(); await player.setFilePath(audioFilePath); await player.play();销毁旧播放器实例再重建
尝试在加载新文件前销毁旧的播放器,避免内部缓存影响:// 先销毁旧播放器 await player.dispose(); // 新建实例加载更新后的文件 AudioPlayer newPlayer = AudioPlayer(); await newPlayer.setAsset('$soundFolder/words/1/102.mp3'); await newPlayer.play();
内容的提问来源于stack exchange,提问作者JohnA
相关产品推荐
相关产品推荐

