Flutter聊天集成插件chatwoot_client_sdk的使用

发布于 1周前 作者 zlyuanteng 来自 Flutter

Flutter聊天集成插件chatwoot_client_sdk的使用

在Flutter应用中集成Chatwoot聊天功能,可以帮助您与访客进行实时交流并提供卓越的支持。本文将详细介绍如何通过chatwoot_client_sdk插件实现这一功能。

1. 创建Chatwoot API收件箱

请参考Chatwoot文档创建一个API收件箱。

chatwoot screenshot

2. 将包添加到项目中

在终端中运行以下命令:

flutter pub add chatwoot_client_sdk

或者,您可以直接在项目的pubspec.yaml文件中添加依赖项:

dependencies:
  chatwoot_client_sdk: <<version>>

请检查此处获取最新版本号。该库使用Hive进行本地存储,并使用Flutter Chat UI构建用户界面。

3. 如何使用

替换baseUrlinboxIdentifier为适当的值。更多关于如何获取baseUrlinboxIdentifier的信息,请参阅Chatwoot文档

a. 使用ChatwootChatDialog

只需调用ChatwootChatDialog.show方法即可显示聊天对话框。要关闭对话框,请使用Navigator.pop(context)

示例代码

import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

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

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  void _showChatwootDialog() {
    ChatwootChatDialog.show(
      context,
      baseUrl: "<<your-chatwoot-base-url-here>>",
      inboxIdentifier: "<<your-inbox-identifier-here>>",
      title: "Chatwoot Support",
      user: ChatwootUser(
        identifier: "john@gmail.com",
        name: "John Samuel",
        email: "john@gmail.com",
      ),
    );
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chatwoot Integration'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: _showChatwootDialog,
          child: Text('Open Chatwoot Dialog'),
        ),
      ),
    );
  }
}

可用参数

参数名称 默认值 类型 描述
context - BuildContext 当前BuildContext
baseUrl - String Chatwoot安装URL
inboxIdentifier - String 目标Chatwoot收件箱标识符
enablePersistance true bool 启用聊天客户端实例的数据(联系人、会话和消息)的持久化存储
title - String 模态窗口标题
user null ChatwootUser 自定义用户详细信息
primaryColor Color(0xff1f93ff) Color 聊天主题的主颜色
secondaryColor Colors.white Color 聊天主题的次颜色
backgroundColor Color(0xfff4f6fb) Color 聊天主题的背景颜色
l10n ChatwootL10n() ChatwootL10n 聊天小部件的本地化字符串
timeFormat DateFormat.Hm() DateFormat 聊天的时间格式
dateFormat DateFormat(“EEEE MMMM d”) DateFormat 聊天的日期格式

b. 使用ChatwootChat小部件

要在您的应用中嵌入ChatwootChat小部件,请使用ChatwootChat小部件。可以通过传递自定义主题颜色和其他参数来自定义聊天UI主题。

示例代码

import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

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

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return ChatwootChat(
      baseUrl: "<<your-chatwoot-base-url-here>>",
      inboxIdentifier: "<<your-inbox-identifier-here>>",
      user: ChatwootUser(
        identifier: "john@gmail.com",
        name: "John Samuel",
        email: "john@gmail.com",
      ),
      appBar: AppBar(
        title: Text(
          "Chatwoot",
          style: TextStyle(
            color: Colors.black,
            fontWeight: FontWeight.bold
          ),
        ),
        backgroundColor: Colors.white,
      ),
      onWelcome: () {
        print("Welcome event received");
      },
      onPing: () {
        print("Ping event received");
      },
      onConfirmedSubscription: () {
        print("Confirmation event received");
      },
      onMessageDelivered: (_) {
        print("Message delivered event received");
      },
      onMessageSent: (_) {
        print("Message sent event received");
      },
      onConversationIsOffline: () {
        print("Conversation is offline event received");
      },
      onConversationIsOnline: () {
        print("Conversation is online event received");
      },
      onConversationStoppedTyping: () {
        print("Conversation stopped typing event received");
      },
      onConversationStartedTyping: () {
        print("Conversation started typing event received");
      },
    );
  }
}

可用参数

参数名称 默认值 类型 描述
appBar null PreferredSizeWidget 如果小部件作为单独页面使用,则指定appBar
baseUrl - String Chatwoot安装URL
inboxIdentifier - String 目标Chatwoot收件箱标识符
enablePersistance true bool 启用聊天客户端实例的数据(联系人、会话和消息)的持久化存储
user null ChatwootUser 自定义用户详细信息
l10n ChatwootL10n() ChatwootL10n 聊天小部件的本地化字符串
timeFormat DateFormat.Hm() DateFormat 聊天的时间格式
dateFormat DateFormat(“EEEE MMMM d”) DateFormat 聊天的日期格式
showAvatars true bool 显示接收到的消息的头像
showUserNames true bool 显示接收到的消息的用户名

c. 使用Chatwoot客户端

您还可以创建一个自定义的聊天UI,并使用ChatwootClient来加载和发送消息。当创建客户端实例时,可以传递ChatwootCallbacks来处理聊天事件。

示例代码

import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

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

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

  final String title;

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

class _MyHomePageState extends State<MyHomePage> {
  ChatwootClient chatwootClient;

  [@override](/user/override)
  void initState() {
    super.initState();

    final chatwootCallbacks = ChatwootCallbacks(
      onWelcome: () {
        print("on welcome");
      },
      onPing: () {
        print("on ping");
      },
      onConfirmedSubscription: () {
        print("on confirmed subscription");
      },
      onConversationStartedTyping: () {
        print("on conversation started typing");
      },
      onConversationStoppedTyping: () {
        print("on conversation stopped typing");
      },
      onPersistedMessagesRetrieved: (persistedMessages) {
        print("persisted messages retrieved");
      },
      onMessagesRetrieved: (messages) {
        print("messages retrieved");
      },
      onMessageReceived: (chatwootMessage) {
        print("message received");
      },
      onMessageDelivered: (chatwootMessage, echoId) {
        print("message delivered");
      },
      onMessageSent: (chatwootMessage, echoId) {
        print("message sent");
      },
      onError: (error) {
        print("Ooops! Something went wrong. Error Cause: ${error.cause}");
      },
    );

    ChatwootClient.create(
        baseUrl: "<<your-chatwoot-base-url-here>>",
        inboxIdentifier: "<<your-inbox-identifier-here>>",
        user: ChatwootUser(
          identifier: "john@gmail.com",
          name: "John Samuel",
          email: "john@gmail.com",
        ),
        enablePersistence: true,
        callbacks: chatwootCallbacks
    ).then((client) {
      setState(() {
        chatwootClient = client;
      });
      chatwootClient.loadMessages();
    }).onError((error, stackTrace) {
      print("chatwoot client creation failed with error $error: $stackTrace");
    });
  }

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chatwoot Integration'),
      ),
      body: Container(),
    );
  }
}

更多关于Flutter聊天集成插件chatwoot_client_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter聊天集成插件chatwoot_client_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是一个关于如何在Flutter项目中集成并使用chatwoot_client_sdk插件的示例代码案例。这个插件允许你将Chatwoot聊天功能集成到你的Flutter应用中。

1. 添加依赖

首先,在你的pubspec.yaml文件中添加chatwoot_client_sdk依赖:

dependencies:
  flutter:
    sdk: flutter
  chatwoot_client_sdk: ^最新版本号  # 请替换为实际最新版本号

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

2. 初始化Chatwoot

在你的Flutter应用的入口文件(通常是main.dart)中,初始化Chatwoot客户端。你需要提供Chatwoot服务器的URL和可选的配置参数。

import 'package:flutter/material.dart';
import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    // 初始化Chatwoot客户端
    ChatwootClient.init(
      endpoint: 'https://your-chatwoot-server.com/api/v2', // 替换为你的Chatwoot服务器URL
      config: ChatwootConfig(
        // 可选配置参数,根据需求设置
        userId: 'user_123', // 用户ID,用于标识当前用户
        displayName: 'John Doe', // 用户的显示名称
        avatarUrl: 'https://example.com/avatar.png', // 用户头像URL
        email: 'john.doe@example.com', // 用户邮箱
      ),
    );

    return MaterialApp(
      title: 'Flutter Chatwoot Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: ChatScreen(),
    );
  }
}

3. 显示聊天界面

接下来,创建一个新的Widget来显示聊天界面。你可以使用ChatwootClient提供的UI组件,或者根据需要自定义UI。

import 'package:flutter/material.dart';
import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';

class ChatScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with Support'),
      ),
      body: ChatwootChatWidget(), // 使用Chatwoot提供的聊天Widget
    );
  }
}

4. 处理用户交互(可选)

根据你的需求,你可能需要在某些用户交互(如按钮点击)时打开聊天窗口或发送消息。你可以使用ChatwootClient提供的API来实现这些功能。

import 'package:flutter/material.dart';
import 'package:chatwoot_client_sdk/chatwoot_client_sdk.dart';

class CustomChatButton extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return FloatingActionButton(
      onPressed: () async {
        // 打开聊天窗口(如果已经初始化并配置,通常会自动处理)
        // 发送自定义消息(可选)
        try {
          await ChatwootClient.sendMessage(
            conversationId: 'conversation_id_if_known', // 可选,如果已知会话ID
            message: 'Hello, I need help!',
          );
        } catch (e) {
          print('Error sending message: $e');
        }
      },
      tooltip: 'Open Chat',
      child: Icon(Icons.chat),
    );
  }
}

// 在ChatScreen中使用自定义按钮
class ChatScreen extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Chat with Support'),
      ),
      body: ChatwootChatWidget(),
      floatingActionButton: CustomChatButton(), // 添加自定义按钮
    );
  }
}

注意事项

  1. 权限和配置:确保你的Chatwoot服务器配置正确,并且你的Flutter应用有适当的网络权限。
  2. 用户身份验证:在实际应用中,你可能需要根据用户的登录状态动态设置ChatwootConfig
  3. 错误处理:在生产环境中,添加适当的错误处理和日志记录。

这个示例提供了一个基本的框架,你可以根据需要进行扩展和自定义。希望这能帮助你在Flutter应用中成功集成Chatwoot聊天功能!

回到顶部