This commit is contained in:
hrxiang
2022-04-28 16:28:13 +08:00
parent 6edf9b74fa
commit d5e3947878
20 changed files with 169 additions and 11 deletions

View File

@@ -6,6 +6,11 @@
4.ConverstaionInfo new add isNotInGroup field</br> 4.ConverstaionInfo new add isNotInGroup field</br>
5.New at type</br> 5.New at type</br>
6.New work moments</br> 6.New work moments</br>
7.New global search</br>
8.New getHistoryMessageListReverse method</br>
9.New getAtAllTag method</br>
10.New resetConversationGroupAtType method</br>
11.New searchGroups method</br>
## 2.0.0+5 ## 2.0.0+5

View File

@@ -41,5 +41,5 @@ android {
} }
} }
dependencies { dependencies {
implementation 'io.openim:client-sdk:2.0.42@aar' implementation 'io.openim:client-sdk:2.0.45@aar'
} }

View File

@@ -3,6 +3,7 @@ package io.openim.flutter_openim_sdk.listener;
import io.openim.flutter_openim_sdk.util.CommonUtil; import io.openim.flutter_openim_sdk.util.CommonUtil;
public class OnSignalingListener implements open_im_sdk_callback.OnSignalingListener { public class OnSignalingListener implements open_im_sdk_callback.OnSignalingListener {
@Override @Override
public void onInvitationCancelled(String s) { public void onInvitationCancelled(String s) {
CommonUtil.emitEvent("signalingListener", "onInvitationCancelled", s); CommonUtil.emitEvent("signalingListener", "onInvitationCancelled", s);
@@ -37,4 +38,9 @@ public class OnSignalingListener implements open_im_sdk_callback.OnSignalingList
public void onReceiveNewInvitation(String s) { public void onReceiveNewInvitation(String s) {
CommonUtil.emitEvent("signalingListener", "onReceiveNewInvitation", s); CommonUtil.emitEvent("signalingListener", "onReceiveNewInvitation", s);
} }
@Override
public void onHangUp(String s) {
CommonUtil.emitEvent("signalingListener", "onHangUp", s);
}
} }

View File

@@ -142,4 +142,16 @@ public class ConversationManager extends BaseManager {
value(methodCall, "operationID") value(methodCall, "operationID")
); );
} }
public void resetConversationGroupAtType(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.resetConversationGroupAtType(
new OnBaseListener(result),
value(methodCall, "operationID"),
value(methodCall, "conversationID")
);
}
public void getAtAllTag(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result, Open_im_sdk.getAtAllTag());
}
} }

View File

@@ -183,4 +183,11 @@ public class GroupManager extends BaseManager {
value(methodCall, "groupNickname") value(methodCall, "groupNickname")
); );
} }
public void searchGroups(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.searchGroups(new OnBaseListener(result),
value(methodCall, "operationID"),
jsonValue(methodCall, "searchParam")
);
}
} }

View File

@@ -381,4 +381,12 @@ public class MessageManager extends BaseManager {
value(methodCall, "groupID") value(methodCall, "groupID")
); );
} }
public void getHistoryMessageListReverse(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.getHistoryMessageListReverse(
new OnBaseListener(result),
value(methodCall, "operationID"),
jsonValue(methodCall)
);
}
} }

View File

@@ -8,7 +8,7 @@ import open_im_sdk.Open_im_sdk;
public class WorkMomentsManager extends BaseManager { public class WorkMomentsManager extends BaseManager {
void setWorkMomentsListener(MethodCall methodCall, MethodChannel.Result result) { public void setWorkMomentsListener(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.setWorkMomentsListener(new OnWorkMomentsListener()); Open_im_sdk.setWorkMomentsListener(new OnWorkMomentsListener());
} }

View File

@@ -22,6 +22,8 @@ public class ConversationManager: BaseServiceManager {
self["setOneConversationPrivateChat"] = setOneConversationPrivateChat self["setOneConversationPrivateChat"] = setOneConversationPrivateChat
self["deleteConversationFromLocalAndSvr"] = deleteConversationFromLocalAndSvr self["deleteConversationFromLocalAndSvr"] = deleteConversationFromLocalAndSvr
self["deleteAllConversationFromLocal"] = deleteAllConversationFromLocal self["deleteAllConversationFromLocal"] = deleteAllConversationFromLocal
self["resetConversationGroupAtType"] = resetConversationGroupAtType
self["getAtAllTag"] = getAtAllTag
} }
func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setConversationListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -93,6 +95,14 @@ public class ConversationManager: BaseServiceManager {
func deleteAllConversationFromLocal(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func deleteAllConversationFromLocal(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkDeleteAllConversationFromLocal(BaseCallback(result: result), methodCall[string: "operationID"]) Open_im_sdkDeleteAllConversationFromLocal(BaseCallback(result: result), methodCall[string: "operationID"])
} }
func resetConversationGroupAtType(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkResetConversationGroupAtType(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "conversationID"])
}
func getAtAllTag(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkGetAtAllTag())
}
} }

View File

@@ -25,6 +25,7 @@ public class GroupManager: BaseServiceManager {
self["changeGroupMute"] = changeGroupMute self["changeGroupMute"] = changeGroupMute
self["changeGroupMemberMute"] = changeGroupMemberMute self["changeGroupMemberMute"] = changeGroupMemberMute
self["setGroupMemberNickname"] = setGroupMemberNickname self["setGroupMemberNickname"] = setGroupMemberNickname
self["searchGroups"] = searchGroups
} }
func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setGroupListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -110,6 +111,10 @@ public class GroupManager: BaseServiceManager {
func setGroupMemberNickname(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setGroupMemberNickname(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSetGroupMemberNickname(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string:"uid"],methodCall[string:"groupNickname"]) Open_im_sdkSetGroupMemberNickname(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "gid"], methodCall[string:"uid"],methodCall[string:"groupNickname"])
} }
func searchGroups(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSearchGroups(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParam"])
}
} }
public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtocol { public class GroupListener: NSObject, Open_im_sdk_callbackOnGroupListenerProtocol {

View File

@@ -43,6 +43,7 @@ public class MessageManager: BaseServiceManager {
self["markMessageAsReadByConID"] = markMessageAsReadByConID self["markMessageAsReadByConID"] = markMessageAsReadByConID
self["clearC2CHistoryMessageFromLocalAndSvr"] = clearC2CHistoryMessageFromLocalAndSvr self["clearC2CHistoryMessageFromLocalAndSvr"] = clearC2CHistoryMessageFromLocalAndSvr
self["clearGroupHistoryMessageFromLocalAndSvr"] = clearGroupHistoryMessageFromLocalAndSvr self["clearGroupHistoryMessageFromLocalAndSvr"] = clearGroupHistoryMessageFromLocalAndSvr
self["getHistoryMessageListReverse"] = getHistoryMessageListReverse
} }
func setAdvancedMsgListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){ func setAdvancedMsgListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@@ -209,6 +210,10 @@ public class MessageManager: BaseServiceManager {
Open_im_sdkClearGroupHistoryMessageFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"]) Open_im_sdkClearGroupHistoryMessageFromLocalAndSvr(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "groupID"])
} }
func getHistoryMessageListReverse(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkGetHistoryMessageListReverse(BaseCallback(result: result), methodCall[string: "operationID"], methodCall.toJsonString())
}
public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol { public class SendMsgProgressListener: NSObject, Open_im_sdk_callbackSendMsgCallBackProtocol {
private let channel: FlutterMethodChannel private let channel: FlutterMethodChannel
private let result: FlutterResult private let result: FlutterResult

View File

@@ -44,7 +44,7 @@ public class SignalingManager: BaseServiceManager {
} }
} }
public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListenerProtocol { public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListenerProtocol {
private let channel:FlutterMethodChannel private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) { init(channel:FlutterMethodChannel) {
@@ -78,5 +78,9 @@ public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListene
public func onReceiveNewInvitation(_ s: String?) { public func onReceiveNewInvitation(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onReceiveNewInvitation", errCode: nil, errMsg: nil, data: s) CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onReceiveNewInvitation", errCode: nil, errMsg: nil, data: s)
} }
public func onHangUp(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onHangUp", errCode: nil, errMsg: nil, data: s)
}
} }

View File

@@ -120,6 +120,9 @@ FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkGetConversationIDBySessionType(N
FOUNDATION_EXPORT void Open_im_sdkGetConversationListSplit(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, long offset, long count); FOUNDATION_EXPORT void Open_im_sdkGetConversationListSplit(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, long offset, long count);
/**
* deprecated
*/
FOUNDATION_EXPORT void Open_im_sdkGetConversationRecvMessageOpt(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationIDList); FOUNDATION_EXPORT void Open_im_sdkGetConversationRecvMessageOpt(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable conversationIDList);
FOUNDATION_EXPORT void Open_im_sdkGetDepartmentMember(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable departmentID, long offset, long count); FOUNDATION_EXPORT void Open_im_sdkGetDepartmentMember(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable departmentID, long offset, long count);
@@ -138,6 +141,8 @@ FOUNDATION_EXPORT void Open_im_sdkGetGroupsInfo(id<Open_im_sdk_callbackBase> _Nu
FOUNDATION_EXPORT void Open_im_sdkGetHistoryMessageList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable getMessageOptions); FOUNDATION_EXPORT void Open_im_sdkGetHistoryMessageList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable getMessageOptions);
FOUNDATION_EXPORT void Open_im_sdkGetHistoryMessageListReverse(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable getMessageOptions);
FOUNDATION_EXPORT void Open_im_sdkGetJoinedGroupList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID); FOUNDATION_EXPORT void Open_im_sdkGetJoinedGroupList(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID);
FOUNDATION_EXPORT int32_t Open_im_sdkGetLoginStatus(void); FOUNDATION_EXPORT int32_t Open_im_sdkGetLoginStatus(void);
@@ -225,6 +230,8 @@ FOUNDATION_EXPORT void Open_im_sdkRevokeMessage(id<Open_im_sdk_callbackBase> _Nu
FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkSdkVersion(void); FOUNDATION_EXPORT NSString* _Nonnull Open_im_sdkSdkVersion(void);
FOUNDATION_EXPORT void Open_im_sdkSearchGroups(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable searchParam);
FOUNDATION_EXPORT void Open_im_sdkSearchLocalMessages(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable searchParam); FOUNDATION_EXPORT void Open_im_sdkSearchLocalMessages(id<Open_im_sdk_callbackBase> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable searchParam);
FOUNDATION_EXPORT void Open_im_sdkSendMessage(id<Open_im_sdk_callbackSendMsgCallBack> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message, NSString* _Nullable recvID, NSString* _Nullable groupID, NSString* _Nullable offlinePushInfo); FOUNDATION_EXPORT void Open_im_sdkSendMessage(id<Open_im_sdk_callbackSendMsgCallBack> _Nullable callback, NSString* _Nullable operationID, NSString* _Nullable message, NSString* _Nullable recvID, NSString* _Nullable groupID, NSString* _Nullable offlinePushInfo);

View File

@@ -93,6 +93,7 @@
@end @end
@protocol Open_im_sdk_callbackOnSignalingListener <NSObject> @protocol Open_im_sdk_callbackOnSignalingListener <NSObject>
- (void)onHangUp:(NSString* _Nullable)hangUpCallback;
- (void)onInvitationCancelled:(NSString* _Nullable)invitationCancelledCallback; - (void)onInvitationCancelled:(NSString* _Nullable)invitationCancelledCallback;
- (void)onInvitationTimeout:(NSString* _Nullable)invitationTimeoutCallback; - (void)onInvitationTimeout:(NSString* _Nullable)invitationTimeoutCallback;
- (void)onInviteeAccepted:(NSString* _Nullable)inviteeAcceptedCallback; - (void)onInviteeAccepted:(NSString* _Nullable)inviteeAcceptedCallback;
@@ -229,6 +230,7 @@
@property(strong, readonly) _Nonnull id _ref; @property(strong, readonly) _Nonnull id _ref;
- (nonnull instancetype)initWithRef:(_Nonnull id)ref; - (nonnull instancetype)initWithRef:(_Nonnull id)ref;
- (void)onHangUp:(NSString* _Nullable)hangUpCallback;
- (void)onInvitationCancelled:(NSString* _Nullable)invitationCancelledCallback; - (void)onInvitationCancelled:(NSString* _Nullable)invitationCancelledCallback;
- (void)onInvitationTimeout:(NSString* _Nullable)invitationTimeoutCallback; - (void)onInvitationTimeout:(NSString* _Nullable)invitationTimeoutCallback;
- (void)onInviteeAccepted:(NSString* _Nullable)inviteeAcceptedCallback; - (void)onInviteeAccepted:(NSString* _Nullable)inviteeAcceptedCallback;

View File

@@ -8,6 +8,7 @@ class OnSignalingListener {
final Function(SignalingInfo info)? onReceiveNewInvitation; final Function(SignalingInfo info)? onReceiveNewInvitation;
final Function(SignalingInfo info)? onInviteeRejectedByOtherDevice; final Function(SignalingInfo info)? onInviteeRejectedByOtherDevice;
final Function(SignalingInfo info)? onInviteeAcceptedByOtherDevice; final Function(SignalingInfo info)? onInviteeAcceptedByOtherDevice;
final Function(SignalingInfo info)? onHangup;
OnSignalingListener({ OnSignalingListener({
this.onInvitationCancelled, this.onInvitationCancelled,
@@ -17,6 +18,7 @@ class OnSignalingListener {
this.onReceiveNewInvitation, this.onReceiveNewInvitation,
this.onInviteeAcceptedByOtherDevice, this.onInviteeAcceptedByOtherDevice,
this.onInviteeRejectedByOtherDevice, this.onInviteeRejectedByOtherDevice,
this.onHangup,
}); });
/// 被邀请者收到:邀请者取消音视频通话 /// 被邀请者收到:邀请者取消音视频通话
@@ -53,4 +55,9 @@ class OnSignalingListener {
void inviteeRejectedByOtherDevice(SignalingInfo info) { void inviteeRejectedByOtherDevice(SignalingInfo info) {
onInviteeRejectedByOtherDevice?.call(info); onInviteeRejectedByOtherDevice?.call(info);
} }
/// 被挂断
void hangup(SignalingInfo info) {
onHangup?.call(info);
}
} }

View File

@@ -243,6 +243,24 @@ class ConversationManager {
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})); }));
/// Reset group converstaion at type
/// 重置at标准位
Future<dynamic> resetConversationGroupAtType({
required String conversationID,
String? operationID,
}) =>
_channel.invokeMethod(
'resetConversationGroupAtType',
_buildParam({
"conversationID": conversationID,
"operationID": Utils.checkOperationID(operationID),
}));
/// Get @ all member tag
/// 查询at所有人标识
Future<dynamic> getAtAllTag() =>
_channel.invokeMethod('getAtAllTag', _buildParam({}));
/// Custom sort for conversation list /// Custom sort for conversation list
/// 会话列表自定义排序规则。 /// 会话列表自定义排序规则。
List<ConversationInfo> simpleSort(List<ConversationInfo> list) => list List<ConversationInfo> simpleSort(List<ConversationInfo> list) => list

View File

@@ -382,6 +382,31 @@ class GroupManager {
'operationID': Utils.checkOperationID(operationID), 'operationID': Utils.checkOperationID(operationID),
})); }));
/// Search group
/// 查询群
/// [keywordList] 搜索关键词,目前仅支持一个关键词搜索,不能为空
/// [isSearchGroupID] 是否以关键词搜索群ID(注两个不可以同时为false)为空默认false
/// [isSearchGroupName] 是否以关键词搜索群名字为空默认false
Future<List<GroupInfo>> searchGroups({
List<String> keywordList = const [],
bool isSearchGroupID = false,
bool isSearchGroupName = false,
String? operationID,
}) =>
_channel
.invokeMethod(
'searchGroups',
_buildParam({
'searchParam': {
'keywordList': keywordList,
'isSearchGroupID': isSearchGroupID,
'isSearchGroupName': isSearchGroupName,
},
'operationID': Utils.checkOperationID(operationID),
}))
.then(
(value) => Utils.toList(value, (map) => GroupInfo.fromJson(map)));
static Map _buildParam(Map param) { static Map _buildParam(Map param) {
param["ManagerName"] = "groupManager"; param["ManagerName"] = "groupManager";
return param; return param;

View File

@@ -258,6 +258,9 @@ class IMManager {
case 'onInviteeRejectedByOtherDevice': case 'onInviteeRejectedByOtherDevice':
signalingManager.listener.inviteeRejectedByOtherDevice(u); signalingManager.listener.inviteeRejectedByOtherDevice(u);
break; break;
case 'onHangUp':
signalingManager.listener.hangup(u);
break;
} }
} else if (call.method == ListenerType.workMomentsListener) { } else if (call.method == ListenerType.workMomentsListener) {
String type = call.arguments['type']; String type = call.arguments['type'];

View File

@@ -529,8 +529,7 @@ class MessageManager {
/// Search local message /// Search local message
/// 搜索消息 /// 搜索消息
/// [sourceID]单聊为用户ID群聊为群ID /// [conversationID] 根据会话查询如果是全局搜索传null
/// [sessionType]会话类型单聊为1群聊为2如果为0则代表搜索全部
/// [keywordList]搜索关键词列表,目前仅支持一个关键词搜索 /// [keywordList]搜索关键词列表,目前仅支持一个关键词搜索
/// [keywordListMatchType]关键词匹配模式1代表与2代表或暂时未用 /// [keywordListMatchType]关键词匹配模式1代表与2代表或暂时未用
/// [senderUserIDList]指定消息发送的uid列表 暂时未用 /// [senderUserIDList]指定消息发送的uid列表 暂时未用
@@ -540,8 +539,7 @@ class MessageManager {
/// [pageIndex]当前页数 /// [pageIndex]当前页数
/// [count]每页数量 /// [count]每页数量
Future<SearchResult> searchLocalMessages({ Future<SearchResult> searchLocalMessages({
required String sourceID, String? conversationID,
required int sessionType,
List<String> keywordList = const [], List<String> keywordList = const [],
int keywordListMatchType = 0, int keywordListMatchType = 0,
List<String> senderUserIDList = const [], List<String> senderUserIDList = const [],
@@ -557,8 +555,7 @@ class MessageManager {
'searchLocalMessages', 'searchLocalMessages',
_buildParam({ _buildParam({
'filter': { 'filter': {
'sourceID': sourceID, 'conversationID': conversationID,
'sessionType': sessionType,
'keywordList': keywordList, 'keywordList': keywordList,
'keywordListMatchType': keywordListMatchType, 'keywordListMatchType': keywordListMatchType,
'senderUserIDList': senderUserIDList, 'senderUserIDList': senderUserIDList,
@@ -649,6 +646,32 @@ class MessageManager {
"operationID": Utils.checkOperationID(operationID), "operationID": Utils.checkOperationID(operationID),
})); }));
/// Find all history message
/// 获取聊天记录
/// [userID]接收消息的用户id
/// [conversationID] 会话id
/// [groupID]接收消息的组id
Future<List<Message>> getHistoryMessageListReverse({
String? userID,
String? groupID,
String? conversationID,
Message? startMsg,
int? count,
String? operationID,
}) =>
_channel
.invokeMethod(
'getHistoryMessageListReverse',
_buildParam({
'userID': userID ?? '',
'groupID': groupID ?? '',
'conversationID': conversationID ?? '',
'startClientMsgID': startMsg?.clientMsgID ?? '',
'count': count ?? 10,
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) => Utils.toList(value, (map) => Message.fromJson(map)));
static Map _buildParam(Map param) { static Map _buildParam(Map param) {
param["ManagerName"] = "messageManager"; param["ManagerName"] = "messageManager";
return param; return param;

View File

@@ -32,7 +32,12 @@ class SearchResultItems {
/// 会话ID /// 会话ID
String? conversationID; String? conversationID;
/// 这个会话下的消息数量 /// 会话类型1单聊2群聊3超级大群4通知会话
int? conversationType;
String? showName;
String? faceURL;
/// 搜索到的这个会话下的消息数量
int? messageCount; int? messageCount;
/// [Message]的列表 /// [Message]的列表
@@ -42,6 +47,9 @@ class SearchResultItems {
SearchResultItems.fromJson(Map<String, dynamic> json) { SearchResultItems.fromJson(Map<String, dynamic> json) {
conversationID = json['conversationID']; conversationID = json['conversationID'];
conversationType = json['conversationType'];
showName = json['showName'];
faceURL = json['faceURL'];
messageCount = json['messageCount']; messageCount = json['messageCount'];
if (json['messageList'] != null) { if (json['messageList'] != null) {
messageList = <Message>[]; messageList = <Message>[];
@@ -54,6 +62,9 @@ class SearchResultItems {
Map<String, dynamic> toJson() { Map<String, dynamic> toJson() {
final data = Map<String, dynamic>(); final data = Map<String, dynamic>();
data['conversationID'] = this.conversationID; data['conversationID'] = this.conversationID;
data['conversationType'] = this.conversationType;
data['showName'] = this.showName;
data['faceURL'] = this.faceURL;
data['messageCount'] = this.messageCount; data['messageCount'] = this.messageCount;
if (this.messageList != null) { if (this.messageList != null) {
data['messageList'] = this.messageList!.map((v) => v.toJson()).toList(); data['messageList'] = this.messageList!.map((v) => v.toJson()).toList();