Flutter聊天集成插件chatwoot_client_sdk的使用
Flutter聊天集成插件chatwoot_client_sdk的使用
在Flutter应用中集成Chatwoot聊天功能,可以帮助您与访客进行实时交流并提供卓越的支持。本文将详细介绍如何通过chatwoot_client_sdk
插件实现这一功能。
1. 创建Chatwoot API收件箱
请参考Chatwoot文档创建一个API收件箱。
2. 将包添加到项目中
在终端中运行以下命令:
flutter pub add chatwoot_client_sdk
或者,您可以直接在项目的pubspec.yaml
文件中添加依赖项:
dependencies:
chatwoot_client_sdk: <<version>>
请检查此处获取最新版本号。该库使用Hive进行本地存储,并使用Flutter Chat UI构建用户界面。
3. 如何使用
替换baseUrl
和inboxIdentifier
为适当的值。更多关于如何获取baseUrl
和inboxIdentifier
的信息,请参阅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
更多关于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(), // 添加自定义按钮
);
}
}
注意事项
- 权限和配置:确保你的Chatwoot服务器配置正确,并且你的Flutter应用有适当的网络权限。
- 用户身份验证:在实际应用中,你可能需要根据用户的登录状态动态设置
ChatwootConfig
。 - 错误处理:在生产环境中,添加适当的错误处理和日志记录。
这个示例提供了一个基本的框架,你可以根据需要进行扩展和自定义。希望这能帮助你在Flutter应用中成功集成Chatwoot聊天功能!