import 'package:example/const.dart'; import 'package:wukongimfluttersdk/common/options.dart'; import 'package:wukongimfluttersdk/model/wk_image_content.dart'; import 'package:wukongimfluttersdk/model/wk_video_content.dart'; import 'package:wukongimfluttersdk/model/wk_voice_content.dart'; import 'package:wukongimfluttersdk/type/const.dart'; import 'package:wukongimfluttersdk/wkim.dart'; import 'order_message_content.dart'; import 'http.dart'; class IMUtils { static Future initIM() async { bool result = await WKIM.shared .setup(Options.newDefault(UserInfo.uid, UserInfo.token)); WKIM.shared.options.getAddr = (Function(String address) complete) async { String ip = await HttpUtils.getIP(UserInfo.uid); complete(ip); }; if (result) { WKIM.shared.connectionManager.connect(); initListener(); } // 注册自定义消息 WKIM.shared.messageManager .registerMsgContent(56, (data) => OrderMsg().decodeJson(data)); return result; } // 监听sdk事件 // 以下事件必须得实现 static initListener() { // 监听同步消息扩展 WKIM.shared.cmdManager.addOnCmdListener('sys_im', (wkcmd) async { if (wkcmd.cmd == 'messageRevoke') { var channelID = wkcmd.param['channel_id']; var channelType = wkcmd.param['channel_type']; if (channelID != '') { // 同步消息扩展 var maxVersion = await WKIM.shared.messageManager .getMaxExtraVersionWithChannel(channelID, channelType); HttpUtils.syncMsgExtra(channelID, channelType, maxVersion); } } else if (wkcmd.cmd == 'channelUpdate') { var channelID = wkcmd.param['channel_id']; var channelType = wkcmd.param['channel_type']; if (channelID != '') { if (channelType == WKChannelType.personal) { // 同步个人信息 HttpUtils.getUserInfo(channelID); } else if (channelType == WKChannelType.group) { // 同步群信息 HttpUtils.getGroupInfo(channelID); } } } else if (wkcmd.cmd == 'unreadClear') { print('清空红点的cmd'); // 未读消息清除 var channelID = wkcmd.param['channel_id']; var channelType = wkcmd.param['channel_type']; var unread = wkcmd.param['unread']; if (channelID != '') { WKIM.shared.conversationManager .updateRedDot(channelID, channelType, unread); } } }); // 监听同步某个频道的消息 WKIM.shared.messageManager.addOnSyncChannelMsgListener((channelID, channelType, startMessageSeq, endMessageSeq, limit, pullMode, back) { HttpUtils.syncChannelMsg(channelID, channelType, startMessageSeq, endMessageSeq, limit, pullMode, (p0) => back(p0)); }); // 监听获取channel资料(群/个人信息) WKIM.shared.channelManager .addOnGetChannelListener((channelId, channelType, back) { if (channelType == WKChannelType.personal) { // 获取个人资料 print('获取个人资料$channelId'); HttpUtils.getUserInfo(channelId); } else if (channelType == WKChannelType.group) { // 获取群资料 HttpUtils.getGroupInfo(channelId); } }); // 监听同步最近会话 WKIM.shared.conversationManager .addOnSyncConversationListener((lastSsgSeqs, msgCount, version, back) { HttpUtils.syncConversation(lastSsgSeqs, msgCount, version, back); }); // 监听上传消息附件 WKIM.shared.messageManager.addOnUploadAttachmentListener((wkMsg, back) { if (wkMsg.contentType == WkMessageContentType.image) { // todo 上传附件 WKImageContent imageContent = wkMsg.messageContent! as WKImageContent; imageContent.url = 'xxxxxx'; wkMsg.messageContent = imageContent; back(true, wkMsg); } if (wkMsg.contentType == WkMessageContentType.voice) { // todo 上传语音 WKVoiceContent voiceContent = wkMsg.messageContent! as WKVoiceContent; voiceContent.url = 'xxxxxx'; wkMsg.messageContent = voiceContent; back(true, wkMsg); } else if (wkMsg.contentType == WkMessageContentType.video) { WKVideoContent videoContent = wkMsg.messageContent! as WKVideoContent; // todo 上传封面及视频 videoContent.cover = 'xxxxxx'; videoContent.url = 'ssssss'; wkMsg.messageContent = videoContent; back(true, wkMsg); } }); } }