Flutter中使用audioplayers加载音频资源失败问题求助
解决Flutter中audioplayers加载音频资源失败的问题
我在Android平台的Flutter项目中,尝试使用audioplayers插件实现扫码后播放提示音的功能,但运行时抛出异常:
Unhandled Exception: Unable to load asset: "assets/asset/sound/beep.mp3"
我的配置与代码
pubspec.yaml配置
dependencies: flutter: sdk: flutter flutter_overlay_loader: ^2.0.0 provider: ^6.0.0 collection: ^1.15.0 permission_handler: ^8.0.0 intl: ^0.17.0 cupertino_icons: ^1.0.2 http: ^1.1.2 flutter_secure_storage: ^9.0.0 barcode_scan2: ^4.3.0 audioplayers: ^5.2.1 dev_dependencies: flutter_test: sdk: flutter flutter_lints: ^2.0.0 flutter: fonts: - family: Poppins fonts: - asset: asset/fonts/Poppins-Regular.ttf - asset: asset/fonts/Poppins-Medium.ttf weight: 500 uses-material-design: true assets: - asset/images/ - asset/images/audit/ - asset/images/inquiry/ - asset/images/common_icon/ - asset/images/bottomNavigation/ - asset/images/floatingButton/ - asset/json/user/ - asset/sound/
资源目录结构
根目录下的asset文件夹包含以下子目录:
- asset/fonts/
- asset/images/
- asset/json/
- asset/sound/
- beep.mp3
音频调用代码
void handleBarcodeScan() async { var result = await BarcodeScanner.scan(); print(result.rawContent); if (result.rawContent.isNotEmpty) { // Play beep sound AudioPlayer audioPlayer = AudioPlayer(); await audioPlayer.play(AssetSource('asset/sound/beep.mp3')); } handleAddButtonPress( barcode: result.rawContent, inventoryDetails: widget.inventoryDetails, ); }
解决方案
1. 修正资源调用路径
报错显示系统在寻找assets/asset/sound/beep.mp3,这是因为AssetSource会自动为路径添加assets/前缀,导致与你配置的asset/sound/路径重复。将调用代码中的路径修改为:
await audioPlayer.play(AssetSource('sound/beep.mp3'));
2. 确保pubspec配置生效
修改pubspec.yaml后,执行以下命令更新Flutter资源索引:
flutter pub get
3. 检查文件大小写与拼写
Android系统对文件路径大小写敏感,确认beep.mp3的文件名和路径拼写完全一致,无大小写错误(例如不要写成Beep.mp3)。
4. 清理缓存重新编译
如果以上步骤无效,清理Flutter缓存后重新运行项目:
flutter clean flutter pub get flutter run
内容的提问来源于stack exchange,提问作者Anamika Singh
相关产品推荐
相关产品推荐

