flutter/lib/IM/im_message.dart

186 lines
5.8 KiB
Dart
Raw Normal View History

2025-07-21 15:46:30 +08:00
import 'package:logger/logger.dart';
import 'package:loopin/IM/im_result.dart';
import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart';
import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart';
import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';
final logger = Logger();
class IMMessage {
/// 发送文本消息
Future<ImResult> sendText({
required String text,
String? toUserID,
String? groupID,
String? data,
}) async {
// 必须且只能设置一个toUserID单聊或 groupID群聊
if ((toUserID == null && groupID == null) || (toUserID != null && groupID != null)) {
return ImResult(
success: false,
code: -1,
desc: "只能指定一个 receivertoUserID或 groupID",
);
}
// 创建消息
final createRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: text);
if (createRes.code != 0 || createRes.data == null) {
return ImResult(
success: false,
code: createRes.code,
desc: "创建消息失败",
);
}
final V2TimMessage? messageInfo = createRes.data?.messageInfo;
V2TimValueCallback<V2TimMessage> sendRes;
// 单聊
if (toUserID != null) {
sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
message: messageInfo,
receiver: toUserID,
groupID: "",
priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT,
onlineUserOnly: false,
isExcludedFromUnreadCount: false,
isExcludedFromLastMessage: false,
needReadReceipt: false,
offlinePushInfo: OfflinePushInfo(title: "新消息", desc: text),
cloudCustomData: "",
localCustomData: "",
);
} else {
// 群聊
sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
message: messageInfo,
receiver: "",
groupID: groupID!,
priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT,
onlineUserOnly: false,
isExcludedFromUnreadCount: false,
isExcludedFromLastMessage: false,
needReadReceipt: false,
offlinePushInfo: OfflinePushInfo(title: "新群聊消息", desc: text),
cloudCustomData: "",
localCustomData: "",
);
}
return ImResult(
success: sendRes.code == 0,
code: sendRes.code,
desc: sendRes.desc,
data: sendRes.data,
);
}
/// 发送自定义消息
Future<ImResult> sendCustomMessage({
required String data,
String? toUserID,
String? groupID,
String? description,
String? extension,
}) async {
// 校验逻辑:单聊或群聊,二选一
if ((toUserID == null && groupID == null) || (toUserID != null && groupID != null)) {
return ImResult(
success: false,
code: -1,
desc: "只能指定一个 receivertoUserID或 groupID",
);
}
// 1. 创建自定义消息
final createRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(
data: data,
desc: description ?? '',
extension: extension ?? '',
);
if (createRes.code != 0 || createRes.data?.id == null) {
return ImResult(
success: false,
code: createRes.code,
desc: "创建自定义消息失败",
);
}
final V2TimMessage? messageInfo = createRes.data?.messageInfo;
// 2. 发送消息
final sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
message: messageInfo,
receiver: toUserID ?? '',
groupID: groupID ?? '',
priority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT,
onlineUserOnly: false,
isExcludedFromUnreadCount: false,
isExcludedFromLastMessage: false,
needReadReceipt: false,
offlinePushInfo: OfflinePushInfo(
title: "自定义消息",
desc: description ?? '您收到一条自定义消息',
),
cloudCustomData: "",
localCustomData: "",
);
return ImResult(
success: sendRes.code == 0,
code: sendRes.code,
desc: sendRes.desc,
);
}
/// 构造单聊伪消息
Future<ImResult> insertTimeLabel(String data, String userId) async {
final customMsgRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(
data: data,
desc: "时间标签",
extension: "",
);
if (customMsgRes.code != 0 || customMsgRes.data?.id == null) {
return ImResult(
success: false,
code: customMsgRes.code,
desc: "创建时间标签消息失败",
);
}
final timeMsg = customMsgRes.data!.messageInfo;
timeMsg!.localCustomData = 'time_label';
return ImResult(
success: true,
code: customMsgRes.code,
desc: "success",
data: timeMsg,
);
// final sendRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(
// message: timeMsg,
// receiver: userId,
// groupID: "",
// onlineUserOnly: false,
// isExcludedFromUnreadCount: true,
// isExcludedFromLastMessage: true,
// needReadReceipt: false,
// cloudCustomData: "",
// localCustomData: "time_label",
// );
// return ImResult(
// success: sendRes.code == 0,
// code: sendRes.code,
// desc: sendRes.code == 0 ? "时间标签发送成功" : sendRes.desc,
// data: timeMsg,
// );
}
}