flutter/lib/IM/im_message.dart
2025-07-21 15:46:30 +08:00

186 lines
5.8 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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,
// );
}
}