Flutter语音助手功能插件voice_assistant的使用
Flutter语音助手功能插件voice_assistant的使用
voice-assistant
这是一个库,用于暴露设备特定的语音识别能力。
此插件包含一组类,使在Flutter中轻松使用底层平台的语音识别功能变得简单。它支持Android和iOS。该库的目标用例是命令和短语,而不是连续的语音转换或始终在线监听。
Android | iOS | |
---|---|---|
支持 | SDK 21+ | 10.0+ |
voice-assistant 实现指南
在iOS的info.plist中添加以下权限
<key>NSMicrophoneUsageDescription</key>
<string>本示例请求时会在设备麦克风上收听语音。</string>
<key>NSSpeechRecognitionUsageDescription</key>
<string>本示例会识别你所说的话并显示出来。</string>
在Android的AndroidManifest.xml中添加以下权限
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.INTERNET"/>
特性
使用此插件可以在您的Flutter应用中:
- 将语音转换为文本并进行搜索。
- 将语音转换为文本并存储到本地存储。
开始使用
此插件依赖于flutter核心。
使用方法
要使用该插件,只需将voice_assistant: ^1.0.1
添加到您的pubspec.yaml
文件中并运行pub get
。
在您的包的pubspec.yaml
中添加以下内容(然后运行隐式的dart pub get
)
voice_assistant: ^1.0.1
示例
import 'dart:convert';
import 'package:example/http_service.dart';
import 'package:voice_assistant/voice_assistant.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
/// 这个小部件是您的应用程序的根。
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: '语音助手',
theme: ThemeData(
primarySwatch: Colors.blue,
),
home: const MyAppPage(title: '语音助手'),
);
}
}
/// 示例项目主屏幕
class MyAppPage extends StatefulWidget {
const MyAppPage({super.key, required this.title});
final String title;
[@override](/user/override)
State<MyAppPage> createState() => _MyAppPageState();
}
class _MyAppPageState extends State<MyAppPage> {
String textStringValue = "";
List<dynamic> searchedData = [];
bool isSearching = false;
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
backgroundColor: Colors.white,
iconTheme: const IconThemeData(
color: Colors.black, // 更改您的颜色
),
title: Text(widget.title, style: const TextStyle(color: Colors.black)),
centerTitle: true,
elevation: 2.5,
actions: [
InkWell(
onTap: () {
Navigator.push(
context,
MaterialPageRoute(
builder: (context) => const VoiceTextListView()),
);
},
child: Container(
margin: const EdgeInsets.only(right: 10),
child: const Icon(Icons.list_alt),
),
)
],
),
body: Center(
/// Center是一个布局小部件。它接受一个子元素并将其定位在父元素的中间。
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
SizedBox(
height: 300,
child: Align(
alignment: Alignment.bottomCenter,
child: VoiceToTextView(
micClicked: true,
isDoingBackgroundProcess: isSearching,
listenTextStreamCallBack: (String? value) {},
listenTextCompleteCallBack:
(String? value, ActionType actionTypeValue) async {
if (value!.isNotEmpty && actionTypeValue == ActionType.search) {
setState(() {
isSearching = true;
});
Map<String, dynamic> requestData = {
'keyword': value,
'search_type': 'varieties',
'latitude': 22.750741,
'longitude': 75.89564
};
String jsonStringResponse =
await httpService.getPosts(requestData);
Map<String, dynamic> responseData =
json.decode(jsonStringResponse);
if (responseData.isNotEmpty &&
responseData['success'] &&
responseData['data'].isNotEmpty) {
setState(() {
searchedData = responseData['data'];
});
}
setState(() {
isSearching = false;
});
} else {}
},
),
),
),
Expanded(
child: Column(
children: [
ListView.builder(
shrinkWrap: true,
itemCount: searchedData.length,
itemBuilder: (BuildContext context, int index) {
return Padding(
padding: const EdgeInsets.only(
left: 10, right: 10, top: 10, bottom: 10),
child: Row(
children: [
const Icon(Icons.lens, size: 10),
const SizedBox(width: 10),
Expanded(
child: Text(
searchedData[index]['title'],
style: const TextStyle(fontSize: 18),
),
)
],
),
);
}),
],
),
),
],
),
),
);
}
}
更多关于Flutter语音助手功能插件voice_assistant的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter语音助手功能插件voice_assistant的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
当然,下面是一个关于如何在Flutter项目中集成和使用voice_assistant
插件的示例代码。请注意,实际使用中可能需要根据插件的最新文档进行调整,因为插件的API可能会随时间变化。
首先,确保在你的pubspec.yaml
文件中添加voice_assistant
依赖:
dependencies:
flutter:
sdk: flutter
voice_assistant: ^最新版本号 # 请替换为实际最新版本号
然后,运行flutter pub get
来安装依赖。
接下来,在你的Flutter项目中,你可以按照以下步骤来初始化并使用voice_assistant
插件。
1. 初始化插件
在你的主Activity或Dart文件的顶部导入插件:
import 'package:voice_assistant/voice_assistant.dart';
2. 请求权限
在Android上,你可能需要请求麦克风权限。你可以在AndroidManifest.xml
中添加权限请求:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
<uses-permission android:name="android.permission.INTERNET" />
然后,在运行时请求权限(如果需要的话,可以使用permission_handler
插件来处理):
import 'package:permission_handler/permission_handler.dart';
Future<void> requestPermissions() async {
Map<Permission, PermissionStatus> statuses = await Permission.getPermissionsStatus([
Permission.microphone,
Permission.internet,
]);
if (statuses[Permission.microphone] != PermissionStatus.granted ||
statuses[Permission.internet] != PermissionStatus.granted) {
Map<Permission, PermissionResult> results = await Permission.requestPermissions([
Permission.microphone,
Permission.internet,
]);
if (results[Permission.microphone] != PermissionResult.granted ||
results[Permission.internet] != PermissionResult.granted) {
// 权限请求被拒绝
print('Permissions were denied');
}
}
}
3. 初始化Voice Assistant
在你的主Dart文件中(例如main.dart
),初始化Voice Assistant:
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await requestPermissions();
VoiceAssistant voiceAssistant = VoiceAssistant();
runApp(MyApp(voiceAssistant: voiceAssistant));
}
class MyApp extends StatelessWidget {
final VoiceAssistant voiceAssistant;
MyApp({required this.voiceAssistant});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: Text('Voice Assistant Demo'),
),
body: VoiceAssistantScreen(voiceAssistant: voiceAssistant),
),
);
}
}
4. 使用Voice Assistant
创建一个新的Widget来管理Voice Assistant的功能:
class VoiceAssistantScreen extends StatefulWidget {
final VoiceAssistant voiceAssistant;
VoiceAssistantScreen({required this.voiceAssistant});
@override
_VoiceAssistantScreenState createState() => _VoiceAssistantScreenState();
}
class _VoiceAssistantScreenState extends State<VoiceAssistantScreen> {
String recognitionResult = '';
@override
Widget build(BuildContext context) {
return Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text('Recognition Result: $recognitionResult'),
ElevatedButton(
onPressed: () async {
// 开始语音识别
bool isListening = await widget.voiceAssistant.startListening(
onResult: (String result) {
setState(() {
recognitionResult = result;
});
},
onError: (String error) {
print('Error: $error');
},
onEnd: () {
print('Listening ended');
},
);
if (!isListening) {
print('Failed to start listening');
}
},
child: Text('Start Listening'),
),
],
),
);
}
}
注意事项
- 确保你按照插件的文档正确配置所有必要的依赖和权限。
- 插件的API可能会变化,请参考最新的官方文档进行调整。
- 在生产环境中,请处理更多的错误情况和用户交互逻辑。
以上是一个基本的Flutter语音助手功能插件voice_assistant
的使用示例。你可以根据实际需求进一步扩展和优化。