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

Flutter Sound录音onProgress流返回null,无法获取分贝值实现音量可视化

核心问题原因

flutter_sound的onProgress流默认不会主动推送录音进度、分贝值相关事件,需要在启动录音时显式配置上报间隔才会生成有效数据,你当前的代码缺少该配置,所以始终拿到null值。

解决方案

  • 启动录音时添加subscriptionDuration参数
    你在record()方法中调用startRecorder时没有配置进度上报间隔,默认值为Duration.zero,此时SDK不会推送任何进度事件。需要在startRecorder入参中添加该参数,可根据可视化流畅度需求设置为50~200毫秒区间的值,示例如下:
Future<void> record() async {
  await _recorder!.startRecorder(
    toFile: '你的录音文件保存路径',
    // 新增该配置,每100毫秒上报一次录音进度
    subscriptionDuration: const Duration(milliseconds: 100),
    // 保留你原有其他录音配置
    codec: Codec.aacADTS,
    sampleRate: 44100,
    bitRate: 128000,
  );
}
  • 修正分贝值到宽度的映射逻辑
    RecordingDisposition.decibels返回的是0~120左右的浮点值,可能出现负数或者超出120的极值,直接作为宽度会导致布局异常,需要先做范围限制,修改你StreamBuilder中的宽度逻辑:
width: snapshot.data!.decibels.clamp(0, 120).toDouble(),
  • 确认平台权限配置完整
    除了运行时申请麦克风权限,还需要在原生工程中补全权限声明,否则录音功能无法正常运行:

    • 安卓端:在AndroidManifest.xml中添加<uses-permission android:name="android.permission.RECORD_AUDIO" />
    • iOS端:在Info.plist中添加NSMicrophoneUsageDescription对应的权限使用说明
  • 确认录音状态正常
    如果录音处于暂停状态,onProgress流也会停止推送数据,确保你调用的是startRecorder而非resumeRecorder,没有触发过暂停逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 04:39:05