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

使用record_mp3录制音频后,如何用audioplayers播放?(报错修复)

解决audioplayers播放本地录制音频的语法错误

错误原因

你遇到的两个报错是因为audioplayers新版本API发生了变更:

  • play方法不再接受String类型的文件路径,要求传入Source子类对象来指定音频源
  • 旧版本的isLocal参数已被移除,改用不同的Source子类区分本地/网络资源

正确的播放代码

修改你的play方法,使用DeviceFileSource(传入本地文件路径)来播放录制好的MP3:

import 'package:audioplayers/audioplayers.dart';
import 'dart:io';

// ... 你的其他代码 ...

void play() async {
  if (recordFilePath != null && File(recordFilePath).existsSync()) {
    final audioPlayer = AudioPlayer();
    // 传入本地文件路径,使用DeviceFileSource封装
    await audioPlayer.play(DeviceFileSource(recordFilePath));
  }
}

或者如果你更倾向于使用File对象,也可以用FileSource:

void play() async {
  if (recordFilePath != null && File(recordFilePath).existsSync()) {
    final audioPlayer = AudioPlayer();
    final audioFile = File(recordFilePath);
    await audioPlayer.play(FileSource(audioFile));
  }
}

额外优化建议

  • 建议将AudioPlayer实例声明为类的成员变量,而不是在play方法内每次创建,避免重复实例化带来的资源浪费:
    final AudioPlayer _audioPlayer = AudioPlayer();
    
    void play() async {
      if (recordFilePath != null && File(recordFilePath).existsSync()) {
        await _audioPlayer.play(DeviceFileSource(recordFilePath));
      }
    }
    
  • 可以添加错误捕获,处理播放失败的情况:
    void play() async {
      try {
        if (recordFilePath != null && File(recordFilePath).existsSync()) {
          final audioPlayer = AudioPlayer();
          await audioPlayer.play(DeviceFileSource(recordFilePath));
        }
      } catch (e) {
        // 处理播放错误,比如更新状态提示用户
        statusText = "播放失败: $e";
        setState(() {});
      }
    }
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 10:43:22