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端
- 在
AndroidManifest.xml中添加必要权限:
<uses-permission android:name="android.permission.INTERNET"/> <!-- 部分TTS引擎需联网加载语音包 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
- 检查设备默认TTS引擎:
打开系统设置→辅助功能→文字转语音输出,确认默认引擎为Google文字转语音(或其他可用引擎),并确保该引擎已下载对应语言的语音包。 - Android 11+ 需添加引擎查询权限:
<queries> <intent> <action android:name="android.intent.action.TTS_SERVICE" /> </intent> </queries>
iOS端
- 在
Info.plist中添加权限说明:
<key>NSSpeechRecognitionUsageDescription</key> <string>需要使用文字转语音功能播放内容</string>
- 开启系统语音功能:
打开设置→辅助功能→语音内容,确保“朗读屏幕”或“朗读所选内容”已启用。
三、其他排查步骤
- 测试更长的文本内容,避免单词语音库缺失导致无声
- 尝试降级
flutter_tts至^3.4.0版本,排除新版本兼容性问题 - 重启设备后再测试,部分系统TTS服务需重启生效
内容的提问来源于stack exchange,提问作者zimmerbimmer
相关产品推荐
相关产品推荐

