This commit is contained in:
hrxiang
2021-07-23 18:01:34 +08:00
parent 3bcc338945
commit c8a895e925
8 changed files with 90 additions and 46 deletions

View File

@@ -9,7 +9,7 @@ class MessageType {
static const merger = 107;
static const revoke = 111;
static const has_read_receipt = 112;
static const typing = 112;
static const typing = 113;
///
static const accept_friend = 201;

View File

@@ -9,7 +9,7 @@ class AdvancedMsgListener {
void onRecvNewMessage(Message msg) {}
void onRecvC2CReadReceipt(Message msg) {}
void onRecvC2CReadReceipt(HaveReadInfo info) {}
void onRecvMessageRevoked(String msgId) {}
}

View File

@@ -1,4 +1,5 @@
import 'dart:convert';
import 'dart:developer';
import 'package:flutter/services.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
@@ -138,11 +139,11 @@ class IMManager {
} else if (call.method == ListenerType.advancedMsgListener) {
var type = call.arguments['type'];
var id = call.arguments['data']['id'];
var value = call.arguments['data']['message'];
log('====================type:$type $value');
switch (type) {
case 'onRecvNewMessage':
var msg = Message.fromJson(
_formatJson(call.arguments['data']['message']));
var msg = Message.fromJson(_formatJson(value));
for (var listener in messageManager.advancedMsgListeners) {
if (listener.id == id) {
listener.onRecvNewMessage(msg);
@@ -150,17 +151,17 @@ class IMManager {
}
break;
case 'onRecvMessageRevoked':
var msgId = call.arguments['data']['message'];
for (var listener in messageManager.advancedMsgListeners) {
if (listener.id == id) {
listener.onRecvMessageRevoked(msgId);
listener.onRecvMessageRevoked(value);
}
}
break;
case 'onRecvC2CReadReceipt':
var info = HaveReadInfo.fromJson(_formatJson(value));
for (var listener in messageManager.advancedMsgListeners) {
if (listener.id == id) {
listener.onRecvC2CReadReceipt(Message());
listener.onRecvC2CReadReceipt(info);
}
}
break;

View File

@@ -36,7 +36,7 @@ class MessageManager {
}
/// send a message to user or to group
///
/// userID: receiver's user ID
Future<dynamic> sendMessage({
required Message message,
String? userID,
@@ -55,6 +55,7 @@ class MessageManager {
}
/// find all history message
/// userID: the user id of the chat partner
Future<List<Message>> getHistoryMessageList({
String? userID,
String? groupID,
@@ -93,6 +94,8 @@ class MessageManager {
}
///
/// @params userID: receiver's user ID
/// @params sender: current user ID
Future insertSingleMessageToLocalStorage({
String? userID,
Message? message,
@@ -117,6 +120,7 @@ class MessageManager {
}
///
/// @params userID: receiver's userID
Future<dynamic> markSingleMessageHasRead({required String userID}) {
return _channel.invokeMethod(
'markSingleMessageHasRead', _buildParam({'userID': userID}));
@@ -128,6 +132,35 @@ class MessageManager {
'markGroupMessageHasRead', _buildParam({'groupID': groupID}));
}
///
/// @params userID: receiver's user ID
Future markC2CMessageAsRead({
required String userID,
required List<String> messageIDList,
}) {
return _channel.invokeMethod(
'markC2CMessageAsRead',
_buildParam({
"messageIDList": messageIDList,
"userID": userID,
}));
}
///
/// @params userID: receiver's user ID
/// @params status: default no
Future typingStatusUpdate({
required String userID,
bool typing = false,
}) {
return _channel.invokeMethod(
'typingStatusUpdate',
_buildParam({
"typing": typing ? 'yes' : 'no',
"userID": userID,
}));
}
///
Future<Message> createTextMessage({required String text}) {
return _channel

View File

@@ -368,43 +368,41 @@ class AtElem {
}
}
class RevokeMessage {
String? serverMsgID;
String? sendID;
String? senderNickname;
String? recvID;
String? groupID;
class HaveReadInfo {
String? uid;
List<String>? msgIDList;
int? readTime;
int? msgFrom;
int? contentType;
int? sendTime;
int? sessionType;
RevokeMessage(
{this.serverMsgID,
this.sendID,
this.senderNickname,
this.recvID,
this.groupID,
HaveReadInfo(
{this.uid,
this.msgIDList,
this.readTime,
this.msgFrom,
this.contentType,
this.sendTime});
this.sessionType});
RevokeMessage.fromJson(Map<String, dynamic> json) {
serverMsgID = json['serverMsgID'];
sendID = json['sendID'];
senderNickname = json['senderNickname'];
recvID = json['recvID'];
groupID = json['groupID'];
HaveReadInfo.fromJson(Map<String, dynamic> json) {
uid = json['uid'];
if (json['msgIDList'] is List) {
msgIDList = (json['msgIDList'] as List).map((e) => '$e').toList();
}
readTime = json['readTime'];
msgFrom = json['msgFrom'];
contentType = json['contentType'];
sendTime = json['sendTime'];
sessionType = json['sessionType'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['serverMsgID'] = this.serverMsgID;
data['sendID'] = this.sendID;
data['senderNickname'] = this.senderNickname;
data['recvID'] = this.recvID;
data['groupID'] = this.groupID;
data['uid'] = this.uid;
data['msgIDList'] = this.msgIDList;
data['readTime'] = this.readTime;
data['msgFrom'] = this.msgFrom;
data['contentType'] = this.contentType;
data['sendTime'] = this.sendTime;
data['sessionType'] = this.sessionType;
return data;
}
}