TencentImSDKPlugin.v2TIMManager.getMessageManager()
.V2TimMessage
type.V2TimMessage
can contain different sub-types to indicate different types of messages.sendMessage
(details) API is the core API for sending a message. It supports sending all types of messages.sendMessage
.Future<V2TimValueCallback<V2TimMessage>> sendMessage({required String id,required String receiver,required String groupID,int priority = 0,bool onlineUserOnly = false,bool needReadReceipt = false,bool isExcludedFromUnreadCount = false,bool isExcludedFromLastMessage = false,Map<String, dynamic>? offlinePushInfo,String? cloudCustomData,String? localCustomData,})
Parameter | Definition | Valid for One-to-One Chat | Valid for Group Chat | Description |
id | ID returned after message creation | YES | YES | Create the message using the `createXxxMessage` API in advance. |
receiver | `userID` of the one-to-one message receiver. | YES | NO | Just specify `receiver` for sending one-to-one chat messages. |
groupID | `groupID` of the group chat | NO | YES | Just specify `groupID` for sending group messages. |
priority | Message priority | NO | YES | Set a higher priority for important messages (such as those for red packets and gifts) and a lower priority for frequent and unimportant messages (such as those for likes). |
onlineUserOnly | Whether only online users can receive the message. | YES | YES | If it is set to `true`, the message cannot be pulled by a receiver through historical messages. This is often used to implement weak prompts, such as "The other party is typing..." and unimportant prompts in a group. |
offlinePushInfo | Offline push message | YES | YES | The title and content carried when a message is pushed offline. |
needReadReceipt | Whether a read receipt is supported for the sent group message | NO | YES | Whether a read receipt is supported for the sent group message |
isExcludedFromUnreadCount | Whether the sent message is counted as the unread message of the conversation | YES | YES | If it is set to `true`, the sent message is not counted as the unread message of the conversation. It defaults to `false`. |
isExcludedFromLastMessage | Whether the sent message is included in the `lastMessage` of the conversation | YES | YES | If it is set to `true`, the sent message is not included in the `lastMessage` of the conversation. It defaults to `false`. |
cloudCustomData | Cloud message data | YES | YES | Extra data of the message that is stored in the cloud and can be accessed by the receiver. |
localCustomData | Local message data | YES | YES | Extra data of the message that is stored locally. It cannot be accessed by the receiver and will be lost after the application is uninstalled. |
groupID
and receiver
are set, targeted group messages are sent to receiver
. For more information, see Targeted Group Message.sendMessage
mentioned above.createTextMessage
(details) to create a text message.sendMessage
(details) to send the message.// Create a text messageV2TimValueCallback<V2TimMsgCreateInfoResult> createTextMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: "test", // Text message);if (createTextMessageRes.code == 0) {// Text message created successfullyString? id = createTextMessageRes.data?.id;// Send the text message// During the call of `sendMessage`: If only `receiver` is entered, the message is sent to the specified recipient as a one-to-one message;// if only `groupID` is entered, the message is sent as a group message;// if `receiver` and `groupID` are entered, the message is sent to the specified member in the specified group and is displayed in the group chat and visible only to the specified recipient.V2TimValueCallback<V2TimMessage> sendMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id!, // ID of the created messagereceiver: "userID", // ID of the recipientgroupID: "groupID", // ID of the receiving grouppriority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT, // Message priorityonlineUserOnly:false, // Whether the message can be received only by online users. If this field is set to true, the message cannot be pulled in recipient historical message pulling. This field is often used to implement weak notification features such as "The other party is typing" or unimportant notifications in the group. This field is not supported by audio-video groups (AVChatRoom).isExcludedFromUnreadCount: false, // Whether the sent message is included in the unread message count of the conversationisExcludedFromLastMessage: false, // Whether the sent message is included in the `lastMessage` of the conversationneedReadReceipt:false, // Whether the message requires a read receipt (to use this feature, you need to purchase the Ultimate edition on v6.1 or later).offlinePushInfo: OfflinePushInfo(), // Title and content for offline pushcloudCustomData: "", // Cloud message data. Extra data of the message that is stored in the cloud and can be accessed by the receiver.localCustomData:"" // Local message data. Extra data of the message that is stored locally. It cannot be accessed by the receiver and will be lost after the application is uninstalled.);if (sendMessageRes.code == 0) {// Message sent successfully}}
createTextMessage
(details) to create a text message.sendMessage
(details) to send the message.// Create a text messageV2TimValueCallback<V2TimMsgCreateInfoResult> createTextMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: "test", // Text message);if (createTextMessageRes.code == 0) {// Text message created successfullyString? id = createTextMessageRes.data?.id;// Send the text message// During the call of `sendMessage`: If only `receiver` is entered, the message is sent to the specified recipient as a one-to-one message;// if only `groupID` is entered, the message is sent as a group message;// if `receiver` and `groupID` are entered, the message is sent to the specified member in the specified group and is displayed in the group chat and visible only to the specified recipient.V2TimValueCallback<V2TimMessage> sendMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id!, // ID of the created messagereceiver: "userID", // ID of the recipientgroupID: "groupID", // ID of the receiving grouppriority: MessagePriorityEnum.V2TIM_PRIORITY_DEFAULT, // Message priorityonlineUserOnly:false, // Whether the message can be received only by online users. If this field is set to true, the message cannot be pulled in recipient historical message pulling. This field is often used to implement weak notification features such as "The other party is typing" or unimportant notifications in the group. This field is not supported by audio-video groups (AVChatRoom).isExcludedFromUnreadCount: false, // Whether the sent message is included in the unread message count of the conversationisExcludedFromLastMessage: false, // Whether the sent message is included in the `lastMessage` of the conversationneedReadReceipt:false, // Whether the message requires a read receipt (to use this feature, you need to purchase the Ultimate edition on v6.1 or later).offlinePushInfo: OfflinePushInfo(), // Title and content for offline pushcloudCustomData: "", // Cloud message data. Extra data of the message that is stored in the cloud and can be accessed by the receiver.localCustomData:"" // Local message data. Extra data of the message that is stored locally. It cannot be accessed by the receiver and will be lost after the application is uninstalled.);if (sendMessageRes.code == 0) {// Message sent successfully}}
sendMessage
(details) mentioned above, which supports more sending parameters (such as priority and offline push message) than the ordinary API.createCustomMessage
(details) to create a custom message.sendMessage
(details) to send the message.// Create a custom messageV2TimValueCallback<V2TimMsgCreateInfoResult> createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(data: 'Custom data',desc: 'Custom desc',extension: 'Custom extension',);if(createCustomMessageRes.code == 0){String id = createCustomMessageRes.data.id;// Send the custom messageV2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "");if(sendMessageRes.code == 0){// Message sent successfully}}
createCustomMessage
(details) to create a custom message.sendMessage
(details) to send the message.// Create a custom messageV2TimValueCallback<V2TimMsgCreateInfoResult> createCustomMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(data: 'Custom data',desc: 'Custom desc',extension: 'Custom extension',);if(createCustomMessageRes.code == 0){String id = createCustomMessageRes.data.id;// Send the custom messageV2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "", groupID: "groupID");if(sendMessageRes.code == 0){// Message sent successfully}}
createXxxMessage
to create a rich media message object of a specified type, where Xxx
indicates the specific message type.sendMessage
(details) to send the message.V2TimValueCallback<V2TimMsgCreateInfoResult> createImageMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createImageMessage(imagePath: "Absolute path of the local image",);if (createImageMessageRes.code == 0) {String id = createImageMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}
V2TimValueCallback<V2TimMsgCreateInfoResult> createSoundMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createSoundMessage(soundPath: "Absolute path of the local audio file",duration: 10,// Audio duration);if (createSoundMessageRes.code == 0) {String id = createSoundMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}
V2TimValueCallback<V2TimMsgCreateInfoResult> createVideoMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createVideoMessage(videoFilePath: "Absolute path of the local video file",type: "mp4", // Video typeduration: 10,// Video durationsnapshotPath: "Absolute path of the local video thumbnail file",);if (createVideoMessageRes.code == 0) {String id = createVideoMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}
V2TimValueCallback<V2TimMsgCreateInfoResult> createFileMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFileMessage(filePath: "Absolute path of the local file",fileName: "File name",);if (createFileMessageRes.code == 0) {String id = createFileMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}
V2TimValueCallback<V2TimMsgCreateInfoResult> createLocationMessage =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createLocationMessage(desc: "Shennan Boulevard, Nanshan District, Shenzhen",// Location information digestlongitude: 34,// Longitudelatitude: 20, // Latitude);if (createLocationMessage.code == 0) {String id = createLocationMessage.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}
V2TimValueCallback<V2TimMsgCreateInfoResult> createFaceMessageRes =await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFaceMessage(index: 0,data: "",);if (createFaceMessageRes.code == 0) {String id = createFaceMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}
getElementById
in the sample code is different from the input ID that you see in the F12 console, the actual value prevails.final ImagePicker _picker = ImagePicker();_sendImageFileOnWeb() async {final pickedFile = await _picker.pickImage(source: ImageSource.gallery);final imageContent = await pickedFile!.readAsBytes();fileName = pickedFile.name;tempFile = File(pickedFile.path);fileContent = imageContent;html.Node? inputElem;inputElem = html.document.getElementById("__image_picker_web-file-input")?.querySelector("input");final convID = widget.conversationID;final convType =widget.conversationType == 1 ? ConvType.c2c : ConvType.group;final createImageMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createImageMessage(inputElement: inputElement);if (createImageMessageRes.code == 0) {String id = createImageMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}}
final ImagePicker _picker = ImagePicker();_sendVideoFileOnWeb() async {final pickedFile = await _picker.pickVideo(source: ImageSource.gallery);final videoContent = await pickedFile!.readAsBytes();fileName = pickedFile.name ?? "";tempFile = File(pickedFile.path);fileContent = videoContent;if(fileName!.split(".")[fileName!.split(".").length - 1] != "mp4"){Toast.showToast("The video message must be in mp4 format.", context);return;}html.Node? inputElem;inputElem = html.document.getElementById("__image_picker_web-file-input")?.querySelector("input");final convID = widget.conversationID;final convType =widget.conversationType == 1 ? ConvType.c2c : ConvType.group;final createVideoMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createVideoMessage(inputElement: inputElement, videoFilePath: "", type: "", duration: 0, snapshotPath: "");if (createVideoMessageRes.code == 0) {String id = createVideoMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}}
_sendFileOnWeb(){final convID = widget.conversationID;final convType =widget.conversationType == 1 ? ConvType.c2c : ConvType.group;FilePickerResult? result = await FilePicker.platform.pickFiles();if (result != null && result.files.isNotEmpty) {html.Node? inputElem;inputElem = html.document.getElementById("__file_picker_web-file-input")?.querySelector("input");fileName = result.files.single.name;final createFileMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFileMessage(inputElement: inputElement, filePath: "", fileName: fileName);if (createFileMessageRes.code == 0) {String id = createFileMessageRes.data.id;V2TimValueCallback<V2TimMessage> sendMessageRes = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage(id: id, receiver: "userID", groupID: "groupID");if (sendMessageRes.code == 0) {// Message sent successfully}}}}
Was this page helpful?