Flutter对话流管理插件flutter_dialogflow的使用

Flutter对话流管理插件flutter_dialogflow的使用

Dialogflow v1 & v2 for Flutter apps.

Dialogflow

❤️ Star ❤️ 仓库以支持项目。谢谢!

这是一个新的Flutter包。

精彩教程

感谢这些教程!

安装

  1. 在项目的 pubspec.yaml 文件中添加以下依赖:
dependencies:
  flutter_dialogflow: ^0.1.0
  1. 使用命令行安装包:
$ flutter packages get
  1. 导入包(对于 Dialogflow v1 或 v2):
// 对于 Dialogflow v1
import 'package:flutter_dialogflow/flutter_dialogflow.dart';

// 对于 Dialogflow v2
import 'package:flutter_dialogflow/dialogflow_v2.dart';

使用

Dialogflow v1

  1. Dialogflow 注册并创建一个新的代理。
  2. 复制 API 密钥(Token)。
  3. 编写代码:
// 初始化 Dialogflow 并发送查询
Dialogflow dialogflow = Dialogflow(token: "Your Token");
AIResponse response = await dialogflow.sendQuery("Your Query");

// 打印响应消息
print(response.getMessageResponse());
  1. 示例代码:
void Response(String query) async {
  Dialogflow dialogflow = Dialogflow(token: "10178f9cb6cf12321asdf4aae75c87cd");
  AIResponse response = await dialogflow.sendQuery(query);
  print(response.getMessageResponse()); // 打印消息响应
}

Dialogflow v2

  1. Dialogflow 注册并创建一个新的代理。
  2. 设置 Google Cloud 项目和认证:
    • 创建或选择一个现有的 GCP 项目。
    • 在 GCP 控制台中,转到“API 和服务” -> “凭据”。
    • 点击“创建凭据”,然后选择“服务账号密钥”。
    • 从下拉菜单中选择您的服务账号,选择 JSON 格式并点击“创建”。这将下载 JSON 密钥文件到您的计算机。
    • 将下载的 JSON 文件移动到项目中的 assets 文件夹。
  3. pubspec.yaml 中配置资源:
flutter:
  uses-material-design: true
  assets:
    - assets/your_file_downloaded_google_cloud.json
  1. 导入 dialogflow_v2 包:
import 'package:flutter_dialogflow/dialogflow_v2.dart';
  1. 编写代码:
AuthGoogle authGoogle = await AuthGoogle(fileJson: "Asset Your File Json").build();
Dialogflow dialogflow = Dialogflow(authGoogle: authGoogle, language: Language.ENGLISH);
AIResponse response = await dialogflow.detectIntent("Your Query");

// 打印消息
print(response.getMessage());
  1. 示例代码:
AuthGoogle authGoogle = await AuthGoogle(fileJson: "assets/your_file_downloaded_google_cloud.json").build();
Dialogflow dialogflow = Dialogflow(authGoogle: authGoogle, language: Language.ENGLISH);
AIResponse response = await dialogflow.detectIntent("Hi!!!");
print(response.getMessage()); // 打印消息
  1. 获取卡片类型的消息列表:
List<dynamic> listMessages = response.getListMessage(); // 获取消息列表
CardDialogflow card = new CardDialogflow(listMessages[0]); // 转换第一个消息为卡片
String title = card.title; // 获取标题
String subtitle = card.subtitle; // 获取副标题
String imageUri = card.imageUri; // 获取图片链接
List<Button> buttons = card.buttons; // 获取按钮列表

Demo

Dialogflow for Flutter Web

访问仓库: Flutter Dialogflow Web 🚀

示例代码

以下是完整的示例代码,展示了如何在 Flutter 中使用 flutter_dialogflow 插件。

import 'package:example/dialogflow_v1.dart';
import 'package:example/dialogflow_v2.dart';
import 'package:flutter/material.dart';

import 'google_assistant.dart';

void main() => runApp(new MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new MaterialApp(
      title: 'Example Dialogflow Flutter',
      theme: new ThemeData(
        primarySwatch: Colors.deepOrange,
      ),
      home: new MyHomePage(title: 'Flutter Demo Dialogflow'),
    );
  }
}

class MyHomePage extends StatefulWidget {
  MyHomePage({Key key, this.title}) : super(key: key);

  final String title;

  [@override](/user/override)
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: new AppBar(
        title: new Text(widget.title),
      ),
      body: new Column(children: <Widget>[
        new Container(
          margin: EdgeInsets.all(10.0),
          child: new RaisedButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => PageDialogflowV1()),
              );
            },
            child: Text("Dialogflow v1"),
          ),
        ),
        new Container(
          margin: EdgeInsets.all(10.0),
          child: new RaisedButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => HomePageDialogflowV2()),
              );
            },
            child: Text("Dialogflow v2"),
          ),
        ),
        new Container(
          margin: EdgeInsets.all(10.0),
          child: new RaisedButton(
            onPressed: () {
              Navigator.push(
                context,
                MaterialPageRoute(builder: (context) => GoogleAssistant()),
              );
            },
            child: Text("Google Assistant"),
          ),
        )
      ]),
    );
  }
}

更多关于Flutter对话流管理插件flutter_dialogflow的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter对话流管理插件flutter_dialogflow的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


flutter_dialogflow 是一个用于在 Flutter 应用中集成 Google Dialogflow 的插件。Dialogflow 是一个自然语言处理平台,可以帮助你构建对话式界面,如聊天机器人、语音助手等。通过 flutter_dialogflow,你可以轻松地将 Dialogflow 的功能集成到你的 Flutter 应用中。

安装 flutter_dialogflow

首先,你需要在 pubspec.yaml 文件中添加 flutter_dialogflow 依赖:

dependencies:
  flutter:
    sdk: flutter
  flutter_dialogflow: ^0.1.0

然后运行 flutter pub get 来安装依赖。

配置 Dialogflow

  1. 创建 Dialogflow 代理:在 Dialogflow 控制台 中创建一个新的代理。

  2. 获取服务账号密钥

    • 在 Google Cloud Console 中,创建一个新的项目或使用现有项目。
    • 启用 Dialogflow API。
    • 创建一个服务账号并下载其 JSON 密钥文件。
  3. 将密钥文件添加到 Flutter 项目:将下载的 JSON 密钥文件放在 assets 目录下,并在 pubspec.yaml 中声明:

flutter:
  assets:
    - assets/your-service-account-key.json

使用 flutter_dialogflow

以下是一个简单的示例,展示如何使用 flutter_dialogflow 与 Dialogflow 进行交互:

import 'package:flutter/material.dart';
import 'package:flutter_dialogflow/dialogflow_v2.dart';

void main() => runApp(MyApp());

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Dialogflow Example',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChatScreen(),
    );
  }
}

class ChatScreen extends StatefulWidget {
  [@override](/user/override)
  _ChatScreenState createState() => _ChatScreenState();
}

class _ChatScreenState extends State<ChatScreen> {
  final List<Map<String, String>> _messages = [];
  final TextEditingController _controller = TextEditingController();

  Future<void> _sendMessage(String message) async {
    setState(() {
      _messages.add({"message": message, "isUser": "true"});
    });

    AuthGoogle authGoogle = await AuthGoogle(
      fileJson: "assets/your-service-account-key.json",
    ).build();

    Dialogflow dialogflow = Dialogflow(authGoogle: authGoogle, language: "en");
    AIResponse response = await dialogflow.detectIntent(message);

    setState(() {
      _messages.add({"message": response.getMessage() ?? "No response", "isUser": "false"});
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with Dialogflow'),
      ),
      body: Column(
        children: <Widget>[
          Expanded(
            child: ListView.builder(
              itemCount: _messages.length,
              itemBuilder: (context, index) {
                return ListTile(
                  title: Text(_messages[index]["message"]!),
                  subtitle: Text(_messages[index]["isUser"] == "true" ? "You" : "Bot"),
                );
              },
            ),
          ),
          Padding(
            padding: const EdgeInsets.all(8.0),
            child: Row(
              children: <Widget>[
                Expanded(
                  child: TextField(
                    controller: _controller,
                    decoration: InputDecoration(
                      hintText: "Type a message",
                    ),
                  ),
                ),
                IconButton(
                  icon: Icon(Icons.send),
                  onPressed: () {
                    _sendMessage(_controller.text);
                    _controller.clear();
                  },
                ),
              ],
            ),
          ),
        ],
      ),
    );
  }
}
回到顶部