Flutter零售助手插件slang_retail_assistant的使用
Flutter零售助手插件slang_retail_assistant的使用
在本教程中,我们将介绍如何在Flutter应用中集成并使用slang_retail_assistant
插件。通过以下步骤,您可以快速实现一个支持语音助手功能的应用。
1. 集成插件
首先,在您的pubspec.yaml
文件中添加slang_retail_assistant
依赖:
dependencies:
slang_retail_assistant: ^版本号
然后运行以下命令以安装依赖:
flutter pub get
2. 初始化插件
在您的主应用类中初始化SlangRetailAssistant
。以下是一个完整的示例代码:
示例代码:main.dart
import 'dart:convert';
import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:slang_retail_assistant/slang_retail_assistant.dart';
void main() {
runApp(new MaterialApp(
home: new MyApp(),
debugShowCheckedModeBanner: false,
));
}
class MyApp extends StatefulWidget {
[@override](/user/override)
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp>
implements
RetailAssistantLifeCycleObserver,
RetailAssistantVoiceAssistListener {
String _searchText = ''; // 搜索结果文本
String _utteranceText = ''; // 用户输入文本
[@override](/user/override)
void initState() {
super.initState();
initSlangRetailAssistant();
}
void initSlangRetailAssistant() {
var assistantConfig = new AssistantConfiguration()
..assistantId = "<AssistantId>" // 替换为您的助理ID
..apiKey = "<ApiKey>" // 替换为您的API密钥
..enableCustomTrigger = true;
SlangRetailAssistant.initialize(assistantConfig);
SlangRetailAssistant.setLifecycleObserver(this);
SlangRetailAssistant.setOnSearchListener((searchInfo, searchUserJourney) {
setState(() {
try {
JsonEncoder encoder = const JsonEncoder.withIndent(' ');
String searchMapString = encoder.convert(searchInfo);
_searchText = searchMapString.toString();
} catch (e) {
print(e);
}
});
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
debugShowCheckedModeBanner: false,
home: Scaffold(
appBar: AppBar(
title: const Text('Slang Retail PlayGround App'),
),
body: Center(
child: Column(
mainAxisSize: MainAxisSize.max,
children: [
Container(height: 25),
Row(
children: [
Expanded(
child: Container(
height: 45.0,
margin:
const EdgeInsets.fromLTRB(17.0, 0.0, 10.0, 0.0),
child: TextField(
controller:
TextEditingController(text: _utteranceText),
decoration: InputDecoration(
labelText: 'Utterance Text',
suffixIcon: GestureDetector(
onTap: () {
Clipboard.setData(
ClipboardData(text: _searchText));
ScaffoldMessenger.of(context).showSnackBar(
const SnackBar(
content: Text('Utterance text copied')),
);
},
child: Icon(Icons.copy),
),
border: OutlineInputBorder(
borderRadius: BorderRadius.circular(10.0),
borderSide: const BorderSide(
color: Colors.blue,
width: 2.0,
),
),
),
onChanged: (value) {
_utteranceText = value;
},
)),
),
Container(
height: 60,
width: 60,
margin: const EdgeInsets.only(right: 10.0),
child: Padding(
padding: const EdgeInsets.all(
8.0), // 调整内边距以适应需求
child: SlangConvaTrigger(
enableCircularBackground: true,
)),
),
],
),
Container(height: 30), // 设置间距
Flexible(
child: FractionallySizedBox(
widthFactor: 0.9,
heightFactor: 0.98,
child: SingleChildScrollView(
physics: const AlwaysScrollableScrollPhysics(),
child: Container(
height: MediaQuery.of(context).size.height,
decoration: const BoxDecoration(
shape: BoxShape.rectangle,
color: Colors.black,
),
child: Padding(
padding: const EdgeInsets.all(16.0),
child: Text(
'$_searchText\n',
style: const TextStyle(
fontSize: 20.0,
fontWeight: FontWeight.bold,
color: Colors.white),
),
),
))))
],
))));
}
// 实现生命周期回调
[@override](/user/override)
void onAssistantClosed(bool isCancelled) {
print("onAssistantClosed " + isCancelled.toString());
}
[@override](/user/override)
void onAssistantInitFailure(String description) {
print("onAssistantInitFailure " + description);
}
[@override](/user/override)
void onAssistantInitSuccess() {
print("onAssistantInitSuccess");
}
[@override](/user/override)
void onAssistantInvoked() {
print("onAssistantInvoked");
}
[@override](/user/override)
void onAssistantLocaleChanged(Map<String, String> locale) {
print("onAssistantLocaleChanged " + locale.toString());
}
[@override](/user/override)
void onOnboardingFailure() {
print("onOnboardingFailure");
}
[@override](/user/override)
void onOnboardingSuccess() {
print("onOnboardingSuccess");
}
[@override](/user/override)
void onUnrecognisedUtterance(String utterance) {
print("onUnrecognisedUtterance " + utterance);
}
[@override](/user/override)
void onUtteranceDetected(String utterance) {
print("onUtteranceDetected " + utterance);
_utteranceText = utterance;
}
[@override](/user/override)
void onMicPermissionDenied() {
print("onMicPermissionDenied");
}
[@override](/user/override)
void onMicPermissionGranted() {
print("onMicPermissionDenied");
}
[@override](/user/override)
void onCoachmarkAction(AssistantCoachmarkType coachmarkType,
AssistantCoachmarkAction coachmarkAction) {
print(
"onCoachmarkAction CoachmarkType=$coachmarkType CoachmarkAction=$coachmarkAction");
}
[@override](/user/override)
void onVoiceAssistEnd(String promptId, String promptText, bool b) {
print("onVoiceAssistEnd promptId " +
promptId +
" promptText " +
promptText +
" boolean " +
b.toString());
}
[@override](/user/override)
void onVoiceAssistStart(String promptId, String promptText) {
print("onVoiceAssistStart promptId " +
promptId +
" promptText " +
promptText);
}
}
更多关于Flutter零售助手插件slang_retail_assistant的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter零售助手插件slang_retail_assistant的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
slang_retail_assistant
是一个 Flutter 插件,用于与 Slang Retail Assistant SDK 集成,为零售应用提供语音助手功能。通过该插件,开发者可以轻松地将语音搜索、导航和个性化推荐等功能集成到他们的 Flutter 应用中。
安装插件
首先,你需要在 pubspec.yaml
文件中添加 slang_retail_assistant
插件的依赖:
dependencies:
flutter:
sdk: flutter
slang_retail_assistant: ^1.0.0 # 请检查最新版本
然后运行 flutter pub get
来安装依赖。
初始化插件
在使用 slang_retail_assistant
之前,你需要初始化它。通常在你的应用的 main.dart
文件中进行初始化:
import 'package:flutter/material.dart';
import 'package:slang_retail_assistant/slang_retail_assistant.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 Slang Retail Assistant
await SlangRetailAssistant.initialize(
apiKey: 'YOUR_API_KEY', // 替换为你的 API Key
assistantId: 'YOUR_ASSISTANT_ID', // 替换为你的 Assistant ID
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Retail Assistant',
home: HomeScreen(),
);
}
}
使用语音助手
在你的应用页面中,你可以通过调用 SlangRetailAssistant
的方法来启动语音助手:
import 'package:flutter/material.dart';
import 'package:slang_retail_assistant/slang_retail_assistant.dart';
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Retail Assistant'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
// 启动语音助手
await SlangRetailAssistant.start();
},
child: Text('Start Voice Assistant'),
),
),
);
}
}
处理回调
你可能希望处理语音助手的回调,例如当用户完成一次交互时。你可以通过设置回调来监听这些事件:
SlangRetailAssistant.setCallback((event) {
switch (event.type) {
case SlangEventType.ASSISTANT_CLOSED:
// 助手关闭时的处理
break;
case SlangEventType.INTENT_CLOSED:
// 意图关闭时的处理
break;
case SlangEventType.SEARCH_COMPLETE:
// 搜索完成时的处理
break;
// 其他事件类型
}
});
自定义界面
slang_retail_assistant
允许你自定义语音助手的界面。你可以通过设置主题、颜色等来匹配你的应用风格:
SlangRetailAssistant.setTheme(
primaryColor: Colors.blue,
accentColor: Colors.orange,
textColor: Colors.black,
// 其他自定义属性
);
注意事项
- API Key 和 Assistant ID: 你需要从 Slang 平台获取 API Key 和 Assistant ID,并在初始化时提供。
- 权限: 确保你的应用有麦克风和网络访问权限,因为语音助手需要这些权限才能正常工作。
- 错误处理: 在初始化或使用过程中,可能会遇到错误,建议添加适当的错误处理逻辑。
示例代码
以下是一个完整的示例代码,展示了如何集成 slang_retail_assistant
插件:
import 'package:flutter/material.dart';
import 'package:slang_retail_assistant/slang_retail_assistant.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
await SlangRetailAssistant.initialize(
apiKey: 'YOUR_API_KEY',
assistantId: 'YOUR_ASSISTANT_ID',
);
runApp(MyApp());
}
class MyApp extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return MaterialApp(
title: 'Retail Assistant',
home: HomeScreen(),
);
}
}
class HomeScreen extends StatelessWidget {
[@override](/user/override)
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Retail Assistant'),
),
body: Center(
child: ElevatedButton(
onPressed: () async {
await SlangRetailAssistant.start();
},
child: Text('Start Voice Assistant'),
),
),
);
}
}