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

Flutter的flutter_tts文本转语音功能无法正常工作求助

Flutter TTS 无法发声的排查与修复方案

一、代码逻辑修复

你的代码存在初始化顺序问题:initState中直接调用flutterTts.setStartHandler时,flutterTts实例可能未完全就绪,建议将处理器设置移至initTts方法内,确保实例初始化完成后再配置。修改后的代码如下:

@override
void initState() {
  super.initState();
  initTts();
}

initTts() async {
  flutterTts = FlutterTts();
  
  // 将处理器设置移至实例初始化后
  await flutterTts.setStartHandler(() {
    setState(() {
      isPlaying = true;
    });
  });

  await flutterTts.setCompletionHandler(() {
    setState(() {
      isPlaying = false;
    });
  });

  // 强制设置语言,确保设备支持对应TTS引擎
  await flutterTts.setLanguage("en-US");
}

同时在_readColorName中添加错误捕获,方便排查调用失败原因:

Future _readColorName() async {
  try {
    await flutterTts.setVolume(1);
    await flutterTts.setSpeechRate(0.7); // 降低语速,避免部分设备适配问题
    await flutterTts.setPitch(1);
    var result = await flutterTts.speak(currentColorName);
    print("TTS调用结果: $result"); // 1为成功,0为失败
    if (result == 1) {
      setState(() {
        isPlaying = true;
      });
    } else {
      print("TTS调用失败");
    }
  } catch (e) {
    print("TTS错误详情: $e");
  }
}

二、平台相关配置检查

Android端

  1. 在AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.INTERNET"/> <!-- 部分TTS引擎需联网加载语音包 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  1. 检查设备默认TTS引擎:
    打开系统设置→辅助功能→文字转语音输出,确认默认引擎为Google文字转语音(或其他可用引擎),并确保该引擎已下载对应语言的语音包。
  2. Android 11+ 需添加引擎查询权限:
<queries>
  <intent>
    <action android:name="android.intent.action.TTS_SERVICE" />
  </intent>
</queries>

iOS端

  1. 在Info.plist中添加权限说明:
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要使用文字转语音功能播放内容</string>
  1. 开启系统语音功能:
    打开设置→辅助功能→语音内容,确保“朗读屏幕”或“朗读所选内容”已启用。

三、其他排查步骤

  • 测试更长的文本内容,避免单词语音库缺失导致无声
  • 尝试降级flutter_tts至^3.4.0版本,排除新版本兼容性问题
  • 重启设备后再测试,部分系统TTS服务需重启生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 22:35:57