You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter音频播放遇W/Parcel警告及资源加载失败问题求助

Flutter音频播放失败:资源未找到异常修复方案

问题核心原因分析

从错误日志和代码来看,导致播放失败的关键问题有两个:

  1. 资源路径错误:
    • 代码中使用UrlSource('note1.wav')会让系统尝试读取设备本地文件系统中的note1.wav,而非应用打包的资源文件,因此抛出ENOENT (No such file or directory)异常。
    • AssetSource('asset/note1.wav')的路径与实际资源位置或pubspec.yaml中的声明不匹配,导致Unable to load asset错误。
  2. 未在pubspec.yaml中正确声明资源:这是Flutter资源加载失败最常见的原因,即使文件存在,未声明的资源不会被打包到应用中。

另外,W/Parcel ( 8822): Expecting binder but got null!属于Android系统层面的非关键警告,与音频播放逻辑无关,可忽略。

修复步骤

1. 确认资源文件结构

将音频文件放在项目根目录的assets文件夹下(如果没有则创建),示例结构:

项目根目录/
├── assets/
│   └── note1.wav
├── lib/
└── pubspec.yaml

也可按分类放在子文件夹,比如assets/audio/note1.wav。

2. 在pubspec.yaml中声明资源

注意缩进必须正确(assets属于flutter节点下,缩进为2个空格):

flutter:
  uses-material-design: true

  # 声明单个资源文件
  assets:
    - assets/note1.wav

  # 如果是文件夹下所有资源,可改为:
  # assets:
  #   - assets/audio/

3. 修正代码中的资源调用

移除错误的UrlSource调用,确保AssetSource的路径与pubspec.yaml中的声明一致:

import 'package:audioplayers/audioplayers.dart';
import 'package:flutter/material.dart';

void main() => runApp(XylophoneApp());

class XylophoneApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        body: SafeArea(
          child: Center(
            child: OutlinedButton(
              onPressed: () async {
                final player = AudioPlayer();
                // 路径与pubspec.yaml中声明的完全匹配
                await player.play(AssetSource('note1.wav'));
                // 如果资源在assets/audio下则改为:
                // await player.play(AssetSource('audio/note1.wav'));
              },
              child: const Text('Click Me'),
            ),
          ),
        ),
      ),
    );
  }
}

4. 重新构建项目

执行以下命令确保资源被正确打包:

flutter pub get
flutter clean
flutter run

内容的提问来源于stack exchange,提问作者cls_404

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 06:44:58