flutter如何集成speech_to_text实现语音识别
在Flutter项目中集成speech_to_text库实现语音识别时,遇到了一些问题。具体步骤如下:
- 已添加speech_to_text依赖并运行
flutter pub get - 按照文档配置了AndroidManifest.xml中的麦克风权限
- 初始化识别器时调用
initialize()方法
但实际运行时始终返回false,无法启动语音监听。请问:
- 是否需要额外配置iOS/Android的本地权限弹窗?
- 有没有完整的示例代码包含错误处理逻辑?
- 在模拟器上测试时需要特别注意什么?
(注:已在真机测试过相同问题)
2 回复
要在Flutter中集成speech_to_text实现语音识别,步骤如下:
-
添加依赖:在
pubspec.yaml中添加:dependencies: speech_to_text: ^6.6.0 -
配置权限(Android/iOS):
- Android:在
AndroidManifest.xml中添加录音权限:<uses-permission android:name="android.permission.RECORD_AUDIO" /> - iOS:在
Info.plist中添加麦克风使用描述:<key>NSMicrophoneUsageDescription</key> <string>需要麦克风权限进行语音识别</string>
- Android:在
-
初始化与权限请求:
final SpeechToText _speech = SpeechToText(); bool _isAvailable = await _speech.initialize(); -
开始监听与识别:
if (_isAvailable) { _speech.listen( onResult: (result) { print(result.recognizedWords); // 输出识别结果 }, ); } -
停止监听:
_speech.stop();
注意:需处理用户授权,若权限被拒需引导用户手动开启。
更多关于flutter如何集成speech_to_text实现语音识别的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
在Flutter中集成speech_to_text库实现语音识别,步骤如下:
1. 添加依赖
在 pubspec.yaml 文件中添加:
dependencies:
speech_to_text: ^6.6.0
运行 flutter pub get 安装。
2. 配置权限
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>
<key>NSSpeechRecognitionUsageDescription</key>
<string>需要语音识别权限</string>
3. 基本代码实现
import 'package:flutter/material.dart';
import 'package:speech_to_text/speech_to_text.dart' as stt;
class SpeechScreen extends StatefulWidget {
@override
_SpeechScreenState createState() => _SpeechScreenState();
}
class _SpeechScreenState extends State<SpeechScreen> {
stt.SpeechToText _speech = stt.SpeechToText();
bool _isListening = false;
String _text = '点击按钮开始语音识别';
@override
void initState() {
super.initState();
_initSpeech();
}
void _initSpeech() async {
bool available = await _speech.initialize(
onStatus: (status) => print('状态: $status'),
onError: (error) => print('错误: $error'),
);
if (!available) {
ScaffoldMessenger.of(context).showSnackBar(
SnackBar(content: Text('语音识别不可用')),
);
}
}
void _listen() async {
if (!_isListening) {
bool available = await _speech.listen(
onResult: (result) => setState(() {
_text = result.recognizedWords;
}),
listenFor: Duration(seconds: 30),
pauseFor: Duration(seconds: 5),
);
if (available) {
setState(() => _isListening = true);
}
} else {
_speech.stop();
setState(() => _isListening = false);
}
}
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text('语音识别')),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(_text, style: TextStyle(fontSize: 20)),
SizedBox(height: 20),
ElevatedButton(
onPressed: _listen,
child: Text(_isListening ? '停止录音' : '开始录音'),
),
],
),
),
);
}
}
4. 关键说明
- initialize(): 初始化语音识别,检查设备支持情况
- listen(): 开始监听语音输入
- stop(): 停止监听
- onResult: 接收识别结果的回调
- 支持设置监听时长(
listenFor)和暂停时长(pauseFor)
5. 注意事项
- 真机测试权限申请
- iOS需要在物理设备上运行
- 可配置识别语言:
localeId: "zh-CN"
这样就完成了基本的语音识别功能集成。

