更新测试

main 0.0.11
cpdl 1 month ago
parent 58fa80a2f8
commit e13c4c6658
  1. 2
      android/build.gradle
  2. 8
      android/src/main/java/io/openim/flutter_openim_sdk/listener/OnAdvancedMsgListener.java
  3. 10
      android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java
  4. 3
      lib/src/enum/message_type.dart
  5. 8
      lib/src/listener/advanced_msg_listener.dart
  6. 5
      lib/src/manager/im_manager.dart
  7. 32
      lib/src/manager/im_message_manager.dart
  8. 67
      lib/src/models/message.dart

@ -57,5 +57,5 @@ android {
} }
dependencies { dependencies {
implementation 'com.openim:sdkcore:1.0.4' implementation 'com.openim:sdkcore:1.0.6'
} }

@ -29,6 +29,14 @@ public class OnAdvancedMsgListener implements open_im_sdk_callback.OnAdvancedMsg
CommonUtil.emitEvent("advancedMsgListener", "onNewRecvMessageRevoked", values); CommonUtil.emitEvent("advancedMsgListener", "onNewRecvMessageRevoked", values);
} }
@Override
public void onNewRecvMessageEdited(String s) {
final Map<String, String> values = new ArrayMap<>();
values.put("id", id);
values.put("messageEdited", s);
CommonUtil.emitEvent("advancedMsgListener", "onNewRecvMessageEdited", values);
}
@Override @Override
public void onRecvC2CReadReceipt(String s) { public void onRecvC2CReadReceipt(String s) {
final Map<String, String> values = new ArrayMap<>(); final Map<String, String> values = new ArrayMap<>();

@ -42,6 +42,16 @@ public class MessageManager extends BaseManager {
); );
} }
public void editMessage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.editMessage(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "conversationID"),
value(methodCall, "clientMsgID"),
value(methodCall, "content")
);
}
public void deleteMessageFromLocalStorage(MethodCall methodCall, MethodChannel.Result result) { public void deleteMessageFromLocalStorage(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.deleteMessageFromLocalStorage( Open_im_sdk.deleteMessageFromLocalStorage(
new OnBaseListener(result, methodCall), new OnBaseListener(result, methodCall),

@ -168,6 +168,9 @@ class MessageType {
/// Recall Message /// Recall Message
static const revokeMessageNotification = 2101; static const revokeMessageNotification = 2101;
/// Edit Message
static const editMessageNotification = 2108;
/// Single Chat Has Read Receipt /// Single Chat Has Read Receipt
static const signalHasReadReceiptNotification = 2150; static const signalHasReadReceiptNotification = 2150;

@ -4,6 +4,7 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
class OnAdvancedMsgListener { class OnAdvancedMsgListener {
Function(Message msg)? onMsgDeleted; Function(Message msg)? onMsgDeleted;
Function(RevokedInfo info)? onNewRecvMessageRevoked; Function(RevokedInfo info)? onNewRecvMessageRevoked;
Function(EditedInfo info)? onNewRecvMessageEdited;
Function(List<ReadReceiptInfo> list)? onRecvC2CReadReceipt; Function(List<ReadReceiptInfo> list)? onRecvC2CReadReceipt;
Function(Message msg)? onRecvNewMessage; Function(Message msg)? onRecvNewMessage;
Function(Message msg)? onRecvOfflineNewMessage; Function(Message msg)? onRecvOfflineNewMessage;
@ -15,6 +16,7 @@ class OnAdvancedMsgListener {
OnAdvancedMsgListener({ OnAdvancedMsgListener({
this.onMsgDeleted, this.onMsgDeleted,
this.onNewRecvMessageRevoked, this.onNewRecvMessageRevoked,
this.onNewRecvMessageEdited,
this.onRecvC2CReadReceipt, this.onRecvC2CReadReceipt,
this.onRecvNewMessage, this.onRecvNewMessage,
this.onRecvOfflineNewMessage, this.onRecvOfflineNewMessage,
@ -30,6 +32,12 @@ class OnAdvancedMsgListener {
onNewRecvMessageRevoked?.call(info); onNewRecvMessageRevoked?.call(info);
} }
/// Message has been edited
void newRecvMessageEdited(EditedInfo info) {
onNewRecvMessageEdited?.call(info);
}
/// C2C Message Read Receipt /// C2C Message Read Receipt
void recvC2CReadReceipt(List<ReadReceiptInfo> list) { void recvC2CReadReceipt(List<ReadReceiptInfo> list) {
onRecvC2CReadReceipt?.call(list); onRecvC2CReadReceipt?.call(list);

@ -179,6 +179,11 @@ class IMManager {
var info = Utils.toObj(value, (map) => RevokedInfo.fromJson(map)); var info = Utils.toObj(value, (map) => RevokedInfo.fromJson(map));
messageManager.msgListener.newRecvMessageRevoked(info); messageManager.msgListener.newRecvMessageRevoked(info);
break; break;
case 'onNewRecvMessageEdited':
var value = call.arguments['data']['messageEdited'];
var info = Utils.toObj(value, (map) => EditedInfo.fromJson(map));
messageManager.msgListener.newRecvMessageEdited(info);
break;
case 'onRecvC2CReadReceipt': case 'onRecvC2CReadReceipt':
var value = call.arguments['data']['msgReceiptList']; var value = call.arguments['data']['msgReceiptList'];
var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map));

@ -151,7 +151,8 @@ class MessageManager {
/// Typing status update /// Typing status update
/// [msgTip] Custom content /// [msgTip] Custom content
@Deprecated('Use [OpenIM.iMManager.conversationManager.changeInputStates(conversationID:focus:)] instead') @Deprecated(
'Use [OpenIM.iMManager.conversationManager.changeInputStates(conversationID:focus:)] instead')
Future typingStatusUpdate({ Future typingStatusUpdate({
required String userID, required String userID,
String? msgTip, String? msgTip,
@ -531,7 +532,8 @@ class MessageManager {
}, },
'operationID': Utils.checkOperationID(operationID), 'operationID': Utils.checkOperationID(operationID),
})) }))
.then((value) => Utils.toObj(value, (map) => SearchResult.fromJson(map))); .then((value) =>
Utils.toObj(value, (map) => SearchResult.fromJson(map)));
/// Revoke a message /// Revoke a message
/// [message] The message to be revoked /// [message] The message to be revoked
@ -548,6 +550,23 @@ class MessageManager {
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})); }));
/// Edit a message
/// [message] The message to be edited
Future editMessage({
required String conversationID,
required String clientMsgID,
String? operationID,
required String? content,
}) =>
_channel.invokeMethod(
'editMessage',
_buildParam({
'conversationID': conversationID,
'clientMsgID': clientMsgID,
"operationID": Utils.checkOperationID(operationID),
'content': content,
}));
/// Mark messages as read /// Mark messages as read
/// [conversationID] Conversation ID /// [conversationID] Conversation ID
/// [messageIDList] List of clientMsgIDs of messages to be marked as read /// [messageIDList] List of clientMsgIDs of messages to be marked as read
@ -587,7 +606,8 @@ class MessageManager {
'lastMinSeq': lastMinSeq ?? 0, 'lastMinSeq': lastMinSeq ?? 0,
'operationID': Utils.checkOperationID(operationID), 'operationID': Utils.checkOperationID(operationID),
})) }))
.then((value) => Utils.toObj(value, (map) => AdvancedMessage.fromJson(map))); .then((value) =>
Utils.toObj(value, (map) => AdvancedMessage.fromJson(map)));
/// Get chat history (newly received chat history after startMsg). Used for locating a specific message in global search and then fetching messages received after that message. /// Get chat history (newly received chat history after startMsg). Used for locating a specific message in global search and then fetching messages received after that message.
/// [conversationID] Conversation ID, can be used for querying notifications /// [conversationID] Conversation ID, can be used for querying notifications
@ -610,7 +630,8 @@ class MessageManager {
'lastMinSeq': lastMinSeq ?? 0, 'lastMinSeq': lastMinSeq ?? 0,
'operationID': Utils.checkOperationID(operationID), 'operationID': Utils.checkOperationID(operationID),
})) }))
.then((value) => Utils.toObj(value, (map) => AdvancedMessage.fromJson(map))); .then((value) =>
Utils.toObj(value, (map) => AdvancedMessage.fromJson(map)));
/// Find message details /// Find message details
/// [conversationID] Conversation ID /// [conversationID] Conversation ID
@ -626,7 +647,8 @@ class MessageManager {
'searchParams': searchParams.map((e) => e.toJson()).toList(), 'searchParams': searchParams.map((e) => e.toJson()).toList(),
'operationID': Utils.checkOperationID(operationID), 'operationID': Utils.checkOperationID(operationID),
})) }))
.then((value) => Utils.toObj(value, (map) => SearchResult.fromJson(map))); .then((value) =>
Utils.toObj(value, (map) => SearchResult.fromJson(map)));
/// Rich text message /// Rich text message
/// [text] Input content /// [text] Input content

@ -1123,6 +1123,73 @@ class RevokedInfo {
} }
} }
/// Message revocation details
class EditedInfo {
/// Editer's ID
String? editerID;
/// Message ID
String? clientMsgID;
/// Revocation time
int? editTime;
/// Message sending time
int? sourceMessageSendTime;
/// Message sender
String? sourceMessageSendID;
/// Message sender's nickname
String? sourceMessageSenderNickname;
/// Conversation type [ConversationType]
int? sessionType;
/// Message content
String? content;
EditedInfo({
this.editerID,
this.clientMsgID,
this.editTime,
this.sourceMessageSendTime,
this.sourceMessageSendID,
this.sourceMessageSenderNickname,
this.sessionType,
this.content,
});
EditedInfo.fromJson(Map<String, dynamic> json) {
editerID = json['editerID'];
clientMsgID = json['clientMsgID'];
editTime = json['editTime'];
sourceMessageSendTime = json['sourceMessageSendTime'];
sourceMessageSendID = json['sourceMessageSendID'];
sourceMessageSenderNickname = json['sourceMessageSenderNickname'];
sessionType = json['sessionType'];
content = json['content'];
}
Map<String, dynamic> toJson() {
final data = Map<String, dynamic>();
data['editerID'] = this.editerID;
data['clientMsgID'] = this.clientMsgID;
data['editTime'] = this.editTime;
data['sourceMessageSendTime'] = this.sourceMessageSendTime;
data['sourceMessageSendID'] = this.sourceMessageSendID;
data['sourceMessageSenderNickname'] = this.sourceMessageSenderNickname;
data['sessionType'] = this.sessionType;
data['content'] = this.content;
return data;
}
}
class AdvancedMessage { class AdvancedMessage {
List<Message>? messageList; List<Message>? messageList;
bool? isEnd; bool? isEnd;

Loading…
Cancel
Save