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

Flutter Speech_to_text静默失效求助:语音输入无响应无报错

解决Flutter语音转文本无法触发回调的问题

针对你遇到的语音输入无法传递到nlp.parseInput()且无打印输出的问题,可从以下几个方向排查修复:

1. 检查麦克风权限配置

speech_to_text依赖麦克风权限,必须在平台配置文件中声明:

  • Android: 在android/app/src/main/AndroidManifest.xml中添加权限:
    <uses-permission android:name="android.permission.RECORD_AUDIO"/>
    
  • iOS: 在ios/Runner/Info.plist中添加麦克风使用说明:
    <key>NSMicrophoneUsageDescription</key>
    <string>需要使用麦克风进行语音识别</string>
    

2. 完善语音初始化的错误监听

原代码中_initSpeech未处理初始化失败或状态变化,添加回调可定位问题:

void _initSpeech() async {
  bool available = await _speechToText.initialize(
    onError: (error) => print('语音初始化错误: ${error.errorMsg}'),
    onStatus: (status) => print('语音识别状态: $status'),
  );
  // 打印可用语音识别语言,确认设备支持目标语言
  if (available) {
    var locales = await _speechToText.locales();
    print('可用语言列表: ${locales.map((l) => '${l.name} (${l.localeId})')}');
  }
  setState(() {
    _speechEnabled = available;
  });
}

3. 明确语音监听的参数配置

调用listen时指定语言和监听模式,确保识别服务正常工作:

void _startListening() async {
  print('开始语音监听');
  await _speechToText.listen(
    onResult: _onSpeechResult,
    localeId: 'zh_CN', // 根据设备语言调整,如'en_US'
    listenMode: ListenMode.confirmation, // 适合短语音识别,如需持续监听用ListenMode.command
    cancelOnError: true,
  );
  setState(() {});
}

4. 修复State中上下文的错误初始化

移除HomeState中直接赋值的context成员,该赋值会在State未挂载时执行,可能导致空指针或其他异常:

// 移除这两行代码
// @override
// BuildContext context = navigatorKey.currentState!.context;

5. 验证监听方法的调用

在_startListening和_stopListening中添加打印,确认按钮点击后是否触发了正确的方法:

void _stopListening() async {
  print('停止语音监听');
  await _speechToText.stop();
  setState(() {});
}

完成以上调整后,重新运行应用,查看控制台输出的状态和错误信息,即可定位并解决语音识别回调未触发的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 06:45:35