Flutter即时通讯插件livetalk_sdk的使用
Flutter即时通讯插件livetalk_sdk的使用
Status
目前正在进行维护并提升性能。
Running
通过在 pubspec.yaml 文件中添加以下依赖来安装插件:
dependencies:
livetalk_sdk: ^latest_version
然后运行以下命令以更新依赖项:
flutter pub get
Configuration
在应用程序的主函数中初始化插件:
LiveTalkSdk(domainPbx: "${your domain => 提供由Omi, 联系销售人员获取}");
如果已经使用了 omikit_flutter_plugin,则您的域名为 realm 中的值。
配置说明:
- 文件上传:我们使用了 flutter_uploader 来上传文件。您需要在项目中进行相应的配置。
- 通知推送:我们使用了 firebase_messaging 来显示通知。您需要正确设置 Firebase。
Implement
创建聊天室
创建一个用于聊天的房间:
try {
EasyLoading.show(); // 显示加载动画
final result = await LiveTalkSdk.shareInstance.createRoom(
phone: _phoneController.text, // 用户电话号码
fullName: _userNameController.text, // 用户姓名
uuid: _phoneController.text, // 唯一用户ID
autoExpired: _isAutoExpired, // 是否自动过期(默认为false)
fcm: "FCM_TOKEN", // FCM 推送令牌
projectId: "FIREBASE_PROJECT_ID", // Firebase 项目ID
);
EasyLoading.dismiss(); // 隐藏加载动画
if (result != null && mounted) {
// 导航到聊天界面
}
} catch (error) {
EasyLoading.dismiss();
if (error is LiveTalkError) {
// 处理错误消息
// error.message["message"] 获取错误信息
}
}
参数说明:
fullname: 用户姓名。phone: 用户电话号码。autoExpired: 是否自动过期,默认为false。如果为true,房间仅在一天内有效。uuid: 唯一用户ID。domain: 您的域名,会在网页管理后台显示。fcm: FCM 推送令牌。projectId: Firebase 项目ID。
获取当前聊天室信息
获取当前聊天室的信息:
await LiveTalkSdk.shareInstance.getCurrentRoom();
// 重要字段:
// + id: 房间ID。
// + guestInfo: 客户端用户信息。
// + lastMessage: 当前房间的最后一条消息。
// + members: 房间成员,可以获取用户的名称和状态。
// + hasMember: 是否有管理员加入(`true` 表示已加入,`false` 表示等待加入)。
获取聊天历史记录
获取聊天历史记录:
await LiveTalkSdk.shareInstance.getMessageHistory(
page: 1, // 页码
size: 20, // 每页大小
);
// 重要字段:
// + id: 消息ID。
// + uuid: 用户唯一ID。
// + createBy: 消息发送者。
// + createDate: 消息创建时间。
// + type: 消息类型(文本/活动)。
// + memberType: 成员类型(`guest` 是客户端用户,`user` 是管理员用户,`system` 是系统用户)。
// + guestInfo: 客户端用户信息。
// + multimedias: 消息附件(如图片、视频等)。
// + template: 活动数据。
// + quoteMessage: 引用的消息。
// + reactions: 消息的反应列表。
发送文本消息
发送文本消息:
final sendingMessage = LiveTalkSendingMessage.createTxtSendMessage(
message: _controller.text, // 消息内容
quoteId: _repMessage?.id, // 如果需要回复某条消息,传递其ID
);
try {
await LiveTalkSdk.shareInstance.sendMessage(sendingMessage);
_controller.clear(); // 清空输入框
} catch (error) {
if (error is LiveTalkError) {
// 处理错误
}
}
参数说明:
message: 消息内容(仅支持文本)。quoteId: 如果需要回复某条消息,传递该消息的ID。
发送文件
发送文件:
final sendingMessage = LiveTalkSendingMessage.createTxtSendFiles(
paths: result.paths.cast<String>(), // 文件路径列表
);
try {
await LiveTalkSdk.shareInstance.sendMessage(sendingMessage);
} catch (error) {
if (error is LiveTalkError) {
// 处理错误
}
}
// 注意事项:
// - 每个文件大小限制为50MB。
// - 支持所有常见文件类型(图片、视频、Word文档、PDF等)。
// - 如果结果成功,您会收到来自套接字的事件。
// - 新增功能:我们将返回 `taskId`,您可以使用它与回调进行比较以更新UI。
监听文件上传状态
监听文件上传进度:
final subscription = LiveTalkSdk.shareInstance.uploadFileStream.listen((event) {
// 事件处理逻辑
});
// 注意事项:
// - 返回状态、任务ID和数据。
// - 状态: `UploadTaskStatus`(来自 `flutter_uploader`)。
// - taskId: 用于与初始ID进行比较。
// - 数据: 如果结果成功,数据即为消息。
删除消息
删除消息:
await LiveTalkSdk.shareInstance.removeMessage(id: id);
// 参数:
// - id: 消息ID。
// - 如果删除成功,您会收到来自套接字的事件。
对消息进行点赞/取消点赞
对消息进行点赞或取消点赞:
await LiveTalkSdk.shareInstance.actionOnMessage(
content: "❤️", // 点赞内容
id: id ?? "", // 消息ID
action: "REACT", // 动作类型("REACT" 或 "UNREACT")
);
// 参数:
// - id: 消息ID。
// - content: 点赞内容。
// - action: "REACT" 表示点赞,"UNREACT" 表示取消点赞。
监听 WebSocket 事件
监听 WebSocket 事件:
LiveTalkSdk.shareInstance.eventStream.listen((result) {
final event = result.eventName; // 事件名称
final data = result.data; // 事件数据
});
// 事件说明:
// - `message`: 收到新消息,您可以在 `data` 字段中获取消息数据。
// - `someone_typing`: 管理员正在输入/停止输入消息,`isTyping` 会包含在 `data` 字段中。
// - `member_join`: 管理员加入客户聊天,您需要刷新房间信息。
// - `member_disconnect`: 管理员下线。
// - `member_connect`: 管理员上线。
// - `lt_reaction`: 某条消息被点赞,`msg_id` 和 `reactions` 会包含在 `data` 字段中。
// - `remove_message`: 删除了一条消息,`message_id` 会包含在 `data` 字段中。
示例代码
以下是完整的示例代码:
import 'dart:io';
import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/material.dart';
import 'package:flutter_easyloading/flutter_easyloading.dart';
import 'package:livetalk_sdk/livetalk_sdk.dart';
import 'package:livetalk_sdk_example/create_user_form_screen.dart';
Future<void> _firebaseMessagingBackgroundHandler(RemoteMessage message) async {
await Firebase.initializeApp();
print("Handling a background message: ${message}");
}
void main() async {
WidgetsFlutterBinding.ensureInitialized();
HttpOverrides.global = MyHttpOverrides();
LiveTalkSdk(domainPbx: "testtuanla2k1");
await Firebase.initializeApp();
NotificationService().init();
FirebaseMessaging.onBackgroundMessage(_firebaseMessagingBackgroundHandler);
runApp(const MyApp());
}
class MyApp extends StatefulWidget {
const MyApp({super.key});
[@override](/user/override)
State<MyApp> createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> {
[@override](/user/override)
void initState() {
super.initState();
EasyLoading.instance.userInteractions = false;
FirebaseMessaging.onMessage.listen((RemoteMessage message) {
NotificationService().showNotification(message);
});
FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
print('Message clicked!');
});
}
[@override](/user/override)
Widget build(BuildContext context) {
return GestureDetector(
child: MaterialApp(
theme: ThemeData.light(),
home: const CreateUserFormScreen(),
debugShowCheckedModeBanner: false,
builder: EasyLoading.init(),
),
onTap: () {
if (FocusManager.instance.primaryFocus?.hasFocus == true) {
FocusManager.instance.primaryFocus?.unfocus();
}
},
);
}
}
class MyHttpOverrides extends HttpOverrides {
[@override](/user/override)
HttpClient createHttpClient(SecurityContext? context) {
return super.createHttpClient(context)
..badCertificateCallback = (
X509Certificate cert,
String host,
int port,
) {
return true;
};
}
}
更多关于Flutter即时通讯插件livetalk_sdk的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html
更多关于Flutter即时通讯插件livetalk_sdk的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html
livetalk_sdk 是一个用于 Flutter 的即时通讯插件,可能用于实现实时聊天、音视频通话等功能。以下是如何在 Flutter 项目中使用 livetalk_sdk 的一般步骤:
1. 添加依赖
首先,你需要在 pubspec.yaml 文件中添加 livetalk_sdk 的依赖。假设 livetalk_sdk 已经发布到 pub.dev,你可以像这样添加依赖:
dependencies:
flutter:
sdk: flutter
livetalk_sdk: ^1.0.0 # 请根据实际情况填写版本号
然后运行 flutter pub get 来获取依赖。
2. 初始化 SDK
在使用 livetalk_sdk 之前,通常需要先初始化 SDK。你可以在 main.dart 或某个初始化函数中进行初始化。
import 'package:livetalk_sdk/livetalk_sdk.dart';
void main() async {
WidgetsFlutterBinding.ensureInitialized();
// 初始化 SDK
await LiveTalkSDK.initialize(
appId: 'YOUR_APP_ID', // 替换为你的 App ID
appKey: 'YOUR_APP_KEY', // 替换为你的 App Key
);
runApp(MyApp());
}
3. 登录与用户管理
通常,即时通讯 SDK 需要用户登录才能使用。你可以使用 livetalk_sdk 提供的登录方法。
import 'package:livetalk_sdk/livetalk_sdk.dart';
Future<void> login(String userId, String token) async {
await LiveTalkSDK.login(userId: userId, token: token);
}
4. 发送消息
使用 livetalk_sdk 发送消息的示例:
import 'package:livetalk_sdk/livetalk_sdk.dart';
Future<void> sendMessage(String targetUserId, String message) async {
await LiveTalkSDK.sendMessage(
targetUserId: targetUserId,
message: message,
);
}
5. 接收消息
你可以通过监听消息事件来接收消息。
import 'package:livetalk_sdk/livetalk_sdk.dart';
void listenForMessages() {
LiveTalkSDK.onMessageReceived.listen((message) {
print('Received message: ${message.content}');
});
}
6. 音视频通话
如果 livetalk_sdk 支持音视频通话,你可以使用它来发起和接收通话。
import 'package:livetalk_sdk/livetalk_sdk.dart';
Future<void> startVideoCall(String targetUserId) async {
await LiveTalkSDK.startVideoCall(targetUserId: targetUserId);
}
void listenForCalls() {
LiveTalkSDK.onCallReceived.listen((call) {
print('Incoming call from: ${call.callerId}');
// 可以在这里处理接听或拒接逻辑
});
}
7. 处理生命周期
在 Flutter 中,你需要注意 SDK 的生命周期管理,确保在应用退出时正确释放资源。
import 'package:livetalk_sdk/livetalk_sdk.dart';
class MyApp extends StatefulWidget {
@override
_MyAppState createState() => _MyAppState();
}
class _MyAppState extends State<MyApp> with WidgetsBindingObserver {
@override
void initState() {
super.initState();
WidgetsBinding.instance.addObserver(this);
}
@override
void dispose() {
WidgetsBinding.instance.removeObserver(this);
LiveTalkSDK.dispose(); // 释放 SDK 资源
super.dispose();
}
@override
void didChangeAppLifecycleState(AppLifecycleState state) {
if (state == AppLifecycleState.paused) {
LiveTalkSDK.background(); // 应用进入后台
} else if (state == AppLifecycleState.resumed) {
LiveTalkSDK.foreground(); // 应用回到前台
}
}
}
8. 错误处理
在使用 SDK 时,确保处理可能出现的错误。
import 'package:livetalk_sdk/livetalk_sdk.dart';
Future<void> safeLogin(String userId, String token) async {
try {
await LiveTalkSDK.login(userId: userId, token: token);
} catch (e) {
print('Login failed: $e');
}
}

