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

1 回复

更多关于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,
  // 其他自定义属性
);

注意事项

  1. API Key 和 Assistant ID: 你需要从 Slang 平台获取 API Key 和 Assistant ID,并在初始化时提供。
  2. 权限: 确保你的应用有麦克风和网络访问权限,因为语音助手需要这些权限才能正常工作。
  3. 错误处理: 在初始化或使用过程中,可能会遇到错误,建议添加适当的错误处理逻辑。

示例代码

以下是一个完整的示例代码,展示了如何集成 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'),
        ),
      ),
    );
  }
}
回到顶部