Add some new function

main
hrxiang 3 years ago
parent a77c86e87a
commit b8ee9276a2
  1. 16
      CHANGELOG.md
  2. 2
      android/build.gradle
  3. 5
      android/src/main/java/io/openim/flutter_openim_sdk/listener/OnSignalingListener.java
  4. 43
      android/src/main/java/io/openim/flutter_openim_sdk/manager/MessageManager.java
  5. 45
      android/src/main/java/io/openim/flutter_openim_sdk/manager/SignalingManager.java
  6. 29
      ios/Classes/Module/MessageManager.swift
  7. 37
      ios/Classes/Module/SignalingManager.swift
  8. 1
      lib/flutter_openim_sdk.dart
  9. 8
      lib/src/listener/signaling_listener.dart
  10. 7
      lib/src/manager/im_manager.dart
  11. 94
      lib/src/manager/im_message_manager.dart
  12. 146
      lib/src/manager/im_signaling_manager.dart
  13. 106
      lib/src/models/meeting_info.dart
  14. 24
      lib/src/models/search_info.dart
  15. 2
      pubspec.yaml

@ -1,3 +1,19 @@
## 2.3.4+2
- Add streamChangedEvent listener for OnSignalingListener
- Add signalingJoinMeeting method for SignalingManager
- Add signalingCreateMeeting method for SignalingManager
- Add signalingOperateStream method for SignalingManager
- Add signalingGetMeetings method for SignalingManager
- Add signalingCloseRoom method for SignalingManager
- Add signalingUpdateMeetingInfo method for SignalingManager
- Update findMessageList method
- Add sendMessageNotOss method for MessageManager
- Add createImageMessageByURL method for MessageManager
- Add createSoundMessageByURL method for MessageManager
- Add createVideoMessageByURL method for MessageManager
- Add createFileMessageByURL method for MessageManager
## 2.3.4+1
- Add signalingGetTokenByRoomID method for SignalingManager

@ -41,5 +41,5 @@ android {
}
}
dependencies {
implementation 'io.openim:core-sdk:2.3.4@aar'
implementation 'io.openim:core-sdk:2.3.4-rc0@aar'
}

@ -49,6 +49,11 @@ public class OnSignalingListener implements open_im_sdk_callback.OnSignalingList
CommonUtil.emitEvent("signalingListener", "onRoomParticipantDisconnected", s);
}
@Override
public void onStreamChange(String s) {
CommonUtil.emitEvent("signalingListener", "onStreamChange", s);
}
@Override
public void onHangUp(String s) {
CommonUtil.emitEvent("signalingListener", "onHangUp", s);

@ -412,7 +412,7 @@ public class MessageManager extends BaseManager {
Open_im_sdk.findMessageList(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "options")
jsonValue(methodCall, "searchParams")
);
}
@ -434,4 +434,45 @@ public class MessageManager extends BaseManager {
jsonValue(methodCall, "richMessageInfoList")
));
}
public void sendMessageNotOss(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.sendMessageNotOss(
new OnMsgSendListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "message"),
value(methodCall, "userID"),
value(methodCall, "groupID"),
jsonValue(methodCall, "offlinePushInfo")
);
}
public void createImageMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createImageMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "sourcePicture"),
jsonValue(methodCall, "bigPicture"),
jsonValue(methodCall, "snapshotPicture")));
}
public void createSoundMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createSoundMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "soundElem")));
}
public void createVideoMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createVideoMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "videoElem")));
}
public void createFileMessageByURL(MethodCall methodCall, MethodChannel.Result result) {
CommonUtil.runMainThreadReturn(result,
Open_im_sdk.createFileMessageByURL(
value(methodCall, "operationID"),
jsonValue(methodCall, "fileElem")));
}
}

@ -67,4 +67,49 @@ public class SignalingManager extends BaseManager {
value(methodCall, "operationID"),
value(methodCall, "roomID"));
}
public void signalingUpdateMeetingInfo(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingUpdateMeetingInfo(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "info"));
}
public void signalingCreateMeeting(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingCreateMeeting(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "info"));
}
public void signalingJoinMeeting(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingJoinMeeting(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
jsonValue(methodCall, "info"));
}
public void signalingOperateStream(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingOperateStream(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "streamType"),
value(methodCall, "roomID"),
value(methodCall, "userID"),
value(methodCall, "mute"),
value(methodCall, "muteAll"));
}
public void signalingGetMeetings(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingGetMeetings(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"));
}
public void signalingCloseRoom(MethodCall methodCall, MethodChannel.Result result) {
Open_im_sdk.signalingCloseRoom(
new OnBaseListener(result, methodCall),
value(methodCall, "operationID"),
value(methodCall, "roomID"));
}
}

@ -49,6 +49,11 @@ public class MessageManager: BaseServiceManager {
self["findMessageList"] = findMessageList
self["createAdvancedTextMessage"] = createAdvancedTextMessage
self["createAdvancedQuoteMessage"] = createAdvancedQuoteMessage
self["sendMessageNotOss"] = sendMessageNotOss
self["createImageMessageByURL"] = createImageMessageByURL
self["createSoundMessageByURL"] = createSoundMessageByURL
self["createVideoMessageByURL"] = createVideoMessageByURL
self["createFileMessageByURL"] = createFileMessageByURL
}
func setAdvancedMsgListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@ -238,7 +243,29 @@ public class MessageManager: BaseServiceManager {
}
func findMessageList(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkFindMessageList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "options"])
Open_im_sdkFindMessageList(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "searchParams"])
}
func sendMessageNotOss(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
let sendMsgProgressListener: SendMsgProgressListener = SendMsgProgressListener(channel: channel,result: result,methodCall: methodCall)
Open_im_sdkSendMessageNotOss(sendMsgProgressListener, methodCall[string: "operationID"], methodCall[jsonString: "message"], methodCall[string: "userID"],
methodCall[string: "groupID"], methodCall[jsonString: "offlinePushInfo"])
}
func createImageMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateImageMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "sourcePicture"], methodCall[jsonString: "bigPicture"], methodCall[jsonString: "snapshotPicture"]))
}
func createSoundMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateSoundMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "soundElem"]))
}
func createVideoMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateVideoMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "videoElem"]))
}
func createFileMessageByURL(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
callBack(result, Open_im_sdkCreateFileMessageByURL(methodCall[string: "operationID"], methodCall[jsonString: "fileElem"]))
}
}

@ -14,6 +14,12 @@ public class SignalingManager: BaseServiceManager {
self["signalingHungUp"] = signalingHungUp
self["signalingGetRoomByGroupID"] = signalingGetRoomByGroupID
self["signalingGetTokenByRoomID"] = signalingGetTokenByRoomID
self["signalingUpdateMeetingInfo"] = signalingUpdateMeetingInfo
self["signalingCreateMeeting"] = signalingCreateMeeting
self["signalingJoinMeeting"] = signalingJoinMeeting
self["signalingOperateStream"] = signalingOperateStream
self["signalingGetMeetings"] = signalingGetMeetings
self["signalingCloseRoom"] = signalingCloseRoom
}
func setSignalingListener(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
@ -52,9 +58,33 @@ public class SignalingManager: BaseServiceManager {
func signalingGetTokenByRoomID(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingGetTokenByRoomID(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "roomID"])
}
func signalingUpdateMeetingInfo(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingUpdateMeetingInfo(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "info"])
}
func signalingCreateMeeting(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingCreateMeeting(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "info"])
}
func signalingJoinMeeting(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingJoinMeeting(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[jsonString: "info"])
}
func signalingOperateStream(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingOperateStream(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "streamType"], methodCall[string: "roomID"], methodCall[string: "userID"], methodCall[bool: "mute"], methodCall[bool: "muteAll"])
}
func signalingGetMeetings(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingGetMeetings(BaseCallback(result: result), methodCall[string: "operationID"])
}
func signalingCloseRoom(methodCall: FlutterMethodCall, result: @escaping FlutterResult){
Open_im_sdkSignalingCloseRoom(BaseCallback(result: result), methodCall[string: "operationID"], methodCall[string: "roomID"])
}
}
public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListenerProtocol {
private let channel:FlutterMethodChannel
init(channel:FlutterMethodChannel) {
@ -100,4 +130,9 @@ public class SignalingListener: NSObject, Open_im_sdk_callbackOnSignalingListene
public func onRoomParticipantDisconnected(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onRoomParticipantDisconnected", errCode: nil, errMsg: nil, data: s)
}
public func onStreamChange(_ s: String?) {
CommonUtil.emitEvent(channel: channel, method: "signalingListener", type: "onStreamChange", errCode: nil, errMsg: nil, data: s)
}
}

@ -31,6 +31,7 @@ export 'src/manager/im_user_manager.dart';
export 'src/manager/im_workmoments_manager.dart';
export 'src/models/conversation_info.dart';
export 'src/models/group_info.dart';
export 'src/models/meeting_info.dart';
export 'src/models/message.dart';
export 'src/models/notification_info.dart';
export 'src/models/organization_info.dart';

@ -1,4 +1,4 @@
import 'package:flutter_openim_sdk/src/models/signaling_info.dart';
import 'package:flutter_openim_sdk/flutter_openim_sdk.dart';
///
class OnSignalingListener {
@ -12,6 +12,7 @@ class OnSignalingListener {
final Function(SignalingInfo info)? onHangup;
final Function(RoomCallingInfo info)? onRoomParticipantConnected;
final Function(RoomCallingInfo info)? onRoomParticipantDisconnected;
final Function(MeetingStreamEvent event)? onMeetingStreamChanged;
OnSignalingListener({
this.onInvitationCancelled,
@ -24,6 +25,7 @@ class OnSignalingListener {
this.onHangup,
this.onRoomParticipantConnected,
this.onRoomParticipantDisconnected,
this.onMeetingStreamChanged,
});
///
@ -73,4 +75,8 @@ class OnSignalingListener {
void roomParticipantDisconnected(RoomCallingInfo info) {
onRoomParticipantDisconnected?.call(info);
}
void streamChangedEvent(MeetingStreamEvent event) {
onMeetingStreamChanged?.call(event);
}
}

@ -250,6 +250,10 @@ class IMManager {
case 'onRoomParticipantDisconnected':
info = Utils.toObj(data, (map) => RoomCallingInfo.fromJson(map));
break;
case 'onStreamChange':
info =
Utils.toObj(data, (map) => MeetingStreamEvent.fromJson(map));
break;
default:
info = Utils.toObj(data, (map) => SignalingInfo.fromJson(map));
break;
@ -285,6 +289,9 @@ class IMManager {
case 'onRoomParticipantDisconnected':
signalingManager.listener.roomParticipantDisconnected(info);
break;
case 'onStreamChange':
signalingManager.listener.streamChangedEvent(info);
break;
}
} else if (call.method == ListenerType.workMomentsListener) {
String type = call.arguments['type'];

@ -735,18 +735,14 @@ class MessageManager {
/// [conversationID] id
/// [clientMsgIDList] id列表
Future<SearchResult> findMessageList({
required String conversationID,
required List<String> clientMsgIDList,
required List<SearchParams> searchParams,
String? operationID,
}) =>
_channel
.invokeMethod(
'findMessageList',
_buildParam({
'options': {
"conversationID": conversationID,
"clientMsgIDList": clientMsgIDList,
},
'searchParams': searchParams.map((e) => e.toJson()),
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) =>
@ -792,6 +788,92 @@ class MessageManager {
}))
.then((value) => Utils.toObj(value, (map) => Message.fromJson(map)));
///
/// [message] [createImageMessageByURL],[createSoundMessageByURL],[createVideoMessageByURL],[createFileMessageByURL]
/// [userID] id
/// [groupID] id
/// [offlinePushInfo] 线
Future<Message> sendMessageNotOss({
required Message message,
required OfflinePushInfo offlinePushInfo,
String? userID,
String? groupID,
String? operationID,
}) =>
_channel
.invokeMethod(
'sendMessageNotOss',
_buildParam({
'message': message.toJson(),
'offlinePushInfo': offlinePushInfo.toJson(),
'userID': userID ?? '',
'groupID': groupID ?? '',
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) => Utils.toObj(value, (map) => Message.fromJson(map)));
///
Future<Message> createImageMessageByURL({
required PictureInfo sourcePicture,
required PictureInfo bigPicture,
required PictureInfo snapshotPicture,
String? operationID,
}) =>
_channel
.invokeMethod(
'createImageMessageByURL',
_buildParam({
'sourcePicture': sourcePicture,
'bigPicture': bigPicture,
'snapshotPicture': snapshotPicture,
"operationID": Utils.checkOperationID(operationID),
}),
)
.then((value) => Utils.toObj(value, (map) => Message.fromJson(map)));
///
Future<Message> createSoundMessageByURL({
required SoundElem soundElem,
String? operationID,
}) =>
_channel
.invokeMethod(
'createSoundMessageByURL',
_buildParam({
'soundElem': soundElem,
"operationID": Utils.checkOperationID(operationID),
}),
)
.then((value) => Utils.toObj(value, (map) => Message.fromJson(map)));
///
Future<Message> createVideoMessageByURL({
required VideoElem videoElem,
String? operationID,
}) =>
_channel
.invokeMethod(
'createVideoMessageByURL',
_buildParam({
'videoElem': videoElem,
"operationID": Utils.checkOperationID(operationID),
}))
.then((value) => Utils.toObj(value, (map) => Message.fromJson(map)));
///
Future<Message> createFileMessageByURL({
required FileElem fileElem,
String? operationID,
}) =>
_channel
.invokeMethod(
'createFileMessageByURL',
_buildParam({
'fileElem': fileElem,
"operationID": Utils.checkOperationID(operationID),
}))
.then((value) => Utils.toObj(value, (map) => Message.fromJson(map)));
static Map _buildParam(Map param) {
param["ManagerName"] = "messageManager";
return param;

@ -135,6 +135,152 @@ class SignalingManager {
(map) => SignalingCertificate.fromJson(
map..addAll({'roomID': roomID}))));
///
/// required String roomID,
/// String? meetingName,
/// String? ex,
/// int startTime = 0,
/// int endTime = 0,
/// bool participantCanUnmuteSelf = true,
/// bool participantCanEnableVideo = true,
/// bool onlyHostInviteUser = true,
/// bool onlyHostShareScreen = true,
/// bool joinDisableMicrophone = true,
/// bool joinDisableVideo = true,
/// bool isMuteAllVideo = true,
/// bool isMuteAllMicrophone = true,
/// List<String> addCanScreenUserIDList = const [],
/// List<String> reduceCanScreenUserIDList = const [],
/// List<String> addDisableMicrophoneUserIDList = const [],
/// List<String> reduceDisableMicrophoneUserIDList = const [],
/// List<String> addDisableVideoUserIDList = const [],
/// List<String> reduceDisableVideoUserIDList = const [],
/// List<String> addPinedUserIDList = const [],
/// List<String> reducePinedUserIDList = const [],
/// List<String> addBeWatchedUserIDList = const [],
/// List<String> reduceBeWatchedUserIDList = const [],
Future<dynamic> signalingUpdateMeetingInfo({
required Map info,
String? operationID,
}) {
assert(info['roomID'] != null);
return _channel.invokeMethod(
'signalingUpdateMeetingInfo',
_buildParam({
'info': info,
'operationID': Utils.checkOperationID(operationID),
}));
}
///
/// [meetingName]
/// [meetingHostUserID] ID
/// [startTime] s
/// [meetingDuration] s
/// [inviteeUserIDList] ID列表
/// [ex]
Future<SignalingCertificate> signalingCreateMeeting({
required String meetingName,
String? meetingHostUserID,
int? startTime,
int? meetingDuration,
List<String> inviteeUserIDList = const [],
String? ex,
String? operationID,
}) =>
_channel
.invokeMethod(
'signalingCreateMeeting',
_buildParam({
'info': {
'meetingName': meetingName,
'meetingHostUserID': meetingHostUserID,
'startTime': startTime,
'meetingDuration': meetingDuration,
'inviteeUserIDList': inviteeUserIDList,
'ex': ex,
},
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) =>
Utils.toObj(value, (map) => SignalingCertificate.fromJson(map)));
///
/// [meetingID] ID
/// [meetingName]
/// [participantNickname]
Future<SignalingCertificate> signalingJoinMeeting({
required String meetingID,
String? meetingName,
String? participantNickname,
String? operationID,
}) =>
_channel
.invokeMethod(
'signalingJoinMeeting',
_buildParam({
'info': {
'meetingID': meetingID,
'meetingName': meetingName,
'participantNickname': participantNickname,
},
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) =>
Utils.toObj(value, (map) => SignalingCertificate.fromJson(map)));
///
/// [roomID] ID
/// [streamType] video/audio
/// [userID] ID
/// [mute] true
/// [muteAll] truevideo/audio
Future<dynamic> signalingOperateStream({
required String roomID,
String? streamType,
required String userID,
bool mute = false,
bool muteAll = false,
String? operationID,
}) =>
_channel.invokeMethod(
'signalingOperateStream',
_buildParam({
'roomID': roomID,
'streamType': streamType,
'userID': userID,
'mute': mute,
'muteAll': muteAll,
'operationID': Utils.checkOperationID(operationID),
}));
///
/// [roomID] ID
Future<MeetingInfoList> signalingGetMeetings({
String? operationID,
}) =>
_channel
.invokeMethod(
'signalingGetMeetings',
_buildParam({
'operationID': Utils.checkOperationID(operationID),
}))
.then((value) =>
Utils.toObj(value, (map) => MeetingInfoList.fromJson(map)));
///
/// [roomID] ID
Future<dynamic> signalingCloseRoom({
required String roomID,
String? operationID,
}) =>
_channel.invokeMethod(
'signalingCloseRoom',
_buildParam({
'roomID': roomID,
'operationID': Utils.checkOperationID(operationID),
}));
static Map _buildParam(Map param) {
param["ManagerName"] = "signalingManager";
return param;

@ -0,0 +1,106 @@
class MeetingInfoList {
List<MeetingInfo>? meetingInfoList;
MeetingInfoList({this.meetingInfoList});
MeetingInfoList.fromJson(Map<String, dynamic> json) {
if (json['meetingInfoList'] != null) {
meetingInfoList = <MeetingInfo>[];
json['meetingInfoList'].forEach((v) {
meetingInfoList!.add(MeetingInfo.fromJson(v));
});
}
}
Map<String, dynamic> toJson() {
final data = Map<String, dynamic>();
if (this.meetingInfoList != null) {
data['meetingInfoList'] =
this.meetingInfoList!.map((v) => v.toJson()).toList();
}
return data;
}
}
class MeetingInfo {
String? meetingID;
String? meetingName;
String? hostUserID;
int? createTime;
int? startTime;
int? endTime;
bool? participantCanEnableVideo;
bool? onlyHostInviteUser;
bool? joinDisableVideo;
bool? participantCanUnmuteSelf;
bool? isMuteAllMicrophone;
List<String>? inviteeUserIDList;
MeetingInfo(
{this.meetingID,
this.meetingName,
this.hostUserID,
this.createTime,
this.startTime,
this.endTime,
this.participantCanEnableVideo,
this.onlyHostInviteUser,
this.joinDisableVideo,
this.participantCanUnmuteSelf,
this.isMuteAllMicrophone,
this.inviteeUserIDList});
MeetingInfo.fromJson(Map<String, dynamic> json) {
meetingID = json['meetingID'];
meetingName = json['meetingName'];
hostUserID = json['hostUserID'];
createTime = json['createTime'];
startTime = json['startTime'];
endTime = json['endTime'];
participantCanEnableVideo = json['participantCanEnableVideo'];
onlyHostInviteUser = json['onlyHostInviteUser'];
joinDisableVideo = json['joinDisableVideo'];
participantCanUnmuteSelf = json['participantCanUnmuteSelf'];
isMuteAllMicrophone = json['isMuteAllMicrophone'];
inviteeUserIDList = json['inviteeUserIDList']?.cast<String>();
}
Map<String, dynamic> toJson() {
final data = Map<String, dynamic>();
data['meetingID'] = this.meetingID;
data['meetingName'] = this.meetingName;
data['hostUserID'] = this.hostUserID;
data['createTime'] = this.createTime;
data['startTime'] = this.startTime;
data['endTime'] = this.endTime;
data['participantCanEnableVideo'] = this.participantCanEnableVideo;
data['onlyHostInviteUser'] = this.onlyHostInviteUser;
data['joinDisableVideo'] = this.joinDisableVideo;
data['participantCanUnmuteSelf'] = this.participantCanUnmuteSelf;
data['isMuteAllMicrophone'] = this.isMuteAllMicrophone;
data['inviteeUserIDList'] = this.inviteeUserIDList;
return data;
}
}
class MeetingStreamEvent {
String? meetingID;
String? streamType;
bool? mute;
MeetingStreamEvent({this.meetingID, this.streamType, this.mute});
MeetingStreamEvent.fromJson(Map<String, dynamic> json) {
meetingID = json['meetingID'];
streamType = json['streamType'];
mute = json['mute'];
}
Map<String, dynamic> toJson() {
final Map<String, dynamic> data = new Map<String, dynamic>();
data['meetingID'] = this.meetingID;
data['streamType'] = this.streamType;
data['mute'] = this.mute;
return data;
}
}

@ -78,3 +78,27 @@ class SearchResultItems {
return data;
}
}
class SearchParams {
String? conversationID;
List<String>? clientMsgIDList;
SearchParams({
this.conversationID,
this.clientMsgIDList,
});
SearchParams.fromJson(Map<String, dynamic> json) {
conversationID = json['conversationID'];
if (json['clientMsgIDList'] != null) {
clientMsgIDList = json['clientMsgIDList'].cast<String>();
}
}
Map<String, dynamic> toJson() {
final data = Map<String, dynamic>();
data['conversationID'] = this.conversationID;
data['messageCount'] = this.clientMsgIDList;
return data;
}
}

@ -1,6 +1,6 @@
name: flutter_openim_sdk
description: An instant messaging plug-in that supports Android and IOS. And the server is also all open source.
version: 2.3.4+1
version: 2.3.4+2
homepage: https://www.rentsoft.cn
repository: https://github.com/OpenIMSDK/Open-IM-SDK-Flutter

Loading…
Cancel
Save