This commit is contained in:
hrxiang
2021-07-22 18:15:40 +08:00
parent 599decfd38
commit 3bcc338945
10 changed files with 250 additions and 132 deletions

View File

@@ -1,5 +1,4 @@
import 'dart:convert';
import 'dart:io';
import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
@@ -11,6 +10,7 @@ class MessageManager {
MessageManager(this._channel);
///
Future addAdvancedMsgListener(AdvancedMsgListener listener) {
advancedMsgListeners.add(listener);
return _channel.invokeMethod(
@@ -20,6 +20,7 @@ class MessageManager {
}));
}
///
Future removeAdvancedMsgListener(AdvancedMsgListener listener) {
advancedMsgListeners.remove(listener);
return _channel.invokeMethod(
@@ -29,11 +30,13 @@ class MessageManager {
}));
}
///
void setMsgSendProgressListener(MsgSendProgressListener listener) {
msgSendProgressListener = listener;
}
/*Future<Message> */
/// send a message to user or to group
///
Future<dynamic> sendMessage({
required Message message,
String? userID,
@@ -51,6 +54,7 @@ class MessageManager {
/*.then((value) => _toObj(value))*/;
}
/// find all history message
Future<List<Message>> getHistoryMessageList({
String? userID,
String? groupID,
@@ -69,21 +73,26 @@ class MessageManager {
.then((value) => _toList(value));
}
/// revoke the sent information
Future revokeMessage({required Message message}) {
return _channel.invokeMethod(
'revokeMessage', _buildParam(message.toJson()));
}
/// delete message
Future deleteMessageFromLocalStorage({required Message message}) {
return _channel.invokeMethod(
'deleteMessageFromLocalStorage', _buildParam(message.toJson()));
}
///
@deprecated
Future deleteMessages({required List<Message> msgList}) {
return _channel.invokeMethod('deleteMessages',
_buildParam({"msgList": msgList.map((e) => e.toJson()).toList()}));
}
///
Future insertSingleMessageToLocalStorage({
String? userID,
Message? message,
@@ -98,6 +107,7 @@ class MessageManager {
}));
}
///
Future findMessages({required List<String> messageIDList}) {
return _channel.invokeMethod(
'findMessages',
@@ -106,22 +116,26 @@ class MessageManager {
}));
}
///
Future<dynamic> markSingleMessageHasRead({required String userID}) {
return _channel.invokeMethod(
'markSingleMessageHasRead', _buildParam({'userID': userID}));
}
///
Future<dynamic> markGroupMessageHasRead({required String groupID}) {
return _channel.invokeMethod(
'markGroupMessageHasRead', _buildParam({'groupID': groupID}));
}
///
Future<Message> createTextMessage({required String text}) {
return _channel
.invokeMethod('createTextMessage', _buildParam({'text': text}))
.then((value) => _toObj(value));
}
///
Future<Message> createTextAtMessage({
required String text,
required List<String> atUidList,
@@ -137,6 +151,7 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<Message> createImageMessage({required String imagePath}) {
return _channel
.invokeMethod(
@@ -146,6 +161,7 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<Message> createSoundMessage({
required String soundPath,
required int duration,
@@ -158,6 +174,7 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<Message> createVideoMessage({
required String videoPath,
required String videoType,
@@ -176,6 +193,7 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<Message> createFileMessage({
required String filePath,
required String fileName,
@@ -190,6 +208,7 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<Message> createMergerMessage({
required List<Message> messageList,
required String title,
@@ -206,6 +225,7 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<Message> createForwardMessage({required List<Message> messageList}) {
return _channel
.invokeMethod(
@@ -216,131 +236,16 @@ class MessageManager {
.then((value) => _toObj(value));
}
///
Future<dynamic> getTotalUnreadMsgCount() {
return _channel.invokeMethod('getTotalUnreadMsgCount', _buildParam({}));
}
///
void forceSyncMsg() {
_channel.invokeMethod('forceSyncMsg', _buildParam({}));
}
Message createTextMessageV2({required String text}) {
return _createMessage(contentType: MessageType.text)..content = text;
}
Message createTextAtMessageV2({
required String text,
required List<String> atUidList,
}) {
var atElem = AtElem(
text: text,
atUserList: atUidList,
isAtSelf: false,
);
return _createMessage(contentType: MessageType.at_text)
..forceList = atUidList
..atElem = atElem
..content = jsonEncode(atElem);
}
Message createImageMessageV2({
required String imagePath,
required String mineType,
required int size,
required int width,
required int height,
}) {
return _createMessage(contentType: MessageType.picture)
..pictureElem = PictureElem(
sourcePath: imagePath,
sourcePicture: PictureInfo(
type: mineType,
size: size,
width: width,
height: height,
),
);
}
Message createSoundMessageV2({
required String soundPath,
required int duration,
required int dataSize,
}) {
return _createMessage(contentType: MessageType.voice)
..soundElem = SoundElem(
soundPath: soundPath,
dataSize: dataSize,
duration: duration,
);
}
Message createVideoMessageV2({
required String videoPath,
required String videoType,
required int videoSize,
required int duration,
required String snapshotPath,
required int snapshotSize,
required int snapshotWidth,
required int snapshotHeight,
}) {
return _createMessage(contentType: MessageType.video)
..videoElem = VideoElem(
videoPath: videoPath,
videoSize: videoSize,
videoType: videoType,
duration: duration,
snapshotPath: snapshotPath,
snapshotSize: snapshotSize,
snapshotHeight: snapshotHeight,
snapshotWidth: snapshotWidth,
);
}
Message createFileMessageV2({
required String filePath,
required String fileName,
required int fileSize,
}) {
return _createMessage(contentType: MessageType.file)
..fileElem = FileElem(
fileName: fileName,
filePath: filePath,
fileSize: fileSize,
);
}
/* Message createMergerMessageV2({
required List<Message> messageList,
required String title,
required List<String> summaryList,
}) {
var message = _createMessage(contentType: MessageType.merger);
return message;
}
Message createForwardMessageV2({required List<Message> messageList}) {
var message = _createMessage();
return message;
}*/
static Message _createMessage({required contentType}) {
var now = DateTime.now();
return Message(
clientMsgID: 'client_msg_id_v2_${now.microsecondsSinceEpoch}',
createTime: now.millisecond ~/ 1000,
sendTime: now.millisecond ~/ 1000,
// sessionType: 0,//请求为单人会话1请求为群聊会话2
msgFrom: 100,
contentType: contentType,
status: MessageStatus.sending,
platformID: Platform.isAndroid ? IMPlatform.android : IMPlatform.ios,
sendID: OpenIM.iMManager.uid,
senderNickName: OpenIM.iMManager.uInfo.name,
);
}
static Map _buildParam(Map param) {
param["ManagerName"] = "messageManager";
return param;