diff --git a/lib/flutter_openim_sdk.dart b/lib/flutter_openim_sdk.dart index 93b15fe..cdc3bc8 100644 --- a/lib/flutter_openim_sdk.dart +++ b/lib/flutter_openim_sdk.dart @@ -33,9 +33,7 @@ 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'; export 'src/models/search_info.dart'; -export 'src/models/signaling_info.dart'; export 'src/models/user_info.dart'; export 'src/openim.dart'; export 'src/utils.dart'; diff --git a/lib/src/listener/user_listener.dart b/lib/src/listener/user_listener.dart index a6840fc..a2c4f34 100644 --- a/lib/src/listener/user_listener.dart +++ b/lib/src/listener/user_listener.dart @@ -4,6 +4,7 @@ import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; class OnUserListener { /// The information of the logged-in user has been updated Function(UserInfo info)? onSelfInfoUpdated; + Function(UserStatusInfo info)? onUserStatusChanged; OnUserListener({this.onSelfInfoUpdated}); @@ -11,4 +12,8 @@ class OnUserListener { void selfInfoUpdated(UserInfo info) { onSelfInfoUpdated?.call(info); } + + void userStatusChanged(UserStatusInfo info) { + onUserStatusChanged?.call(info); + } } diff --git a/lib/src/manager/im_manager.dart b/lib/src/manager/im_manager.dart index 358f9c9..fbf0e12 100644 --- a/lib/src/manager/im_manager.dart +++ b/lib/src/manager/im_manager.dart @@ -63,29 +63,29 @@ class IMManager { userInfo = Utils.toObj(data, (map) => UserInfo.fromJson(map)); userManager.listener.selfInfoUpdated(userInfo); break; + case 'onUserStatusChanged': + final status = Utils.toObj(data, (map) => UserStatusInfo.fromJson(map)); + userManager.listener.userStatusChanged(status); + break; } } else if (call.method == ListenerType.groupListener) { String type = call.arguments['type']; dynamic data = call.arguments['data']; switch (type) { case 'onGroupApplicationAccepted': - final i = Utils.toObj( - data, (map) => GroupApplicationInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map)); groupManager.listener.groupApplicationAccepted(i); break; case 'onGroupApplicationAdded': - final i = Utils.toObj( - data, (map) => GroupApplicationInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map)); groupManager.listener.groupApplicationAdded(i); break; case 'onGroupApplicationDeleted': - final i = Utils.toObj( - data, (map) => GroupApplicationInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map)); groupManager.listener.groupApplicationDeleted(i); break; case 'onGroupApplicationRejected': - final i = Utils.toObj( - data, (map) => GroupApplicationInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map)); groupManager.listener.groupApplicationRejected(i); break; case 'onGroupDismissed': @@ -97,18 +97,15 @@ class IMManager { groupManager.listener.groupInfoChanged(i); break; case 'onGroupMemberAdded': - final i = - Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map)); groupManager.listener.groupMemberAdded(i); break; case 'onGroupMemberDeleted': - final i = - Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map)); groupManager.listener.groupMemberDeleted(i); break; case 'onGroupMemberInfoChanged': - final i = - Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupMembersInfo.fromJson(map)); groupManager.listener.groupMemberInfoChanged(i); break; case 'onJoinedGroupAdded': @@ -136,36 +133,31 @@ class IMManager { break; case 'onRecvC2CReadReceipt': var value = call.arguments['data']['msgReceiptList']; - var list = - Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); + var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); messageManager.msgListener.recvC2CReadReceipt(list); break; case 'onRecvGroupReadReceipt': var value = call.arguments['data']['groupMsgReceiptList']; - var list = - Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); + var list = Utils.toList(value, (map) => ReadReceiptInfo.fromJson(map)); messageManager.msgListener.recvGroupReadReceipt(list); break; case 'onRecvMessageExtensionsAdded': var msgID = call.arguments['data']['msgID']; var value = call.arguments['data']['reactionExtensionList']; var list = Utils.toList(value, (map) => KeyValue.fromJson(map)); - messageManager.msgListener - .recvMessageExtensionsAdded(msgID, list); + messageManager.msgListener.recvMessageExtensionsAdded(msgID, list); break; case 'onRecvMessageExtensionsChanged': var msgID = call.arguments['data']['msgID']; var value = call.arguments['data']['reactionExtensionList']; var list = Utils.toList(value, (map) => KeyValue.fromJson(map)); - messageManager.msgListener - .recvMessageExtensionsChanged(msgID, list); + messageManager.msgListener.recvMessageExtensionsChanged(msgID, list); break; case 'onRecvMessageExtensionsDeleted': var msgID = call.arguments['data']['msgID']; var value = call.arguments['data']['reactionExtensionKeyList']; var list = Utils.toList(value, (map) => '$map'); - messageManager.msgListener - .recvMessageExtensionsDeleted(msgID, list); + messageManager.msgListener.recvMessageExtensionsDeleted(msgID, list); break; case 'onRecvNewMessage': @@ -207,18 +199,15 @@ class IMManager { conversationManager.listener.syncServerFailed(); break; case 'onNewConversation': - var list = - Utils.toList(data, (map) => ConversationInfo.fromJson(map)); + var list = Utils.toList(data, (map) => ConversationInfo.fromJson(map)); conversationManager.listener.newConversation(list); break; case 'onConversationChanged': - var list = - Utils.toList(data, (map) => ConversationInfo.fromJson(map)); + var list = Utils.toList(data, (map) => ConversationInfo.fromJson(map)); conversationManager.listener.conversationChanged(list); break; case 'onTotalUnreadMessageCountChanged': - conversationManager.listener - .totalUnreadMessageCountChanged(data ?? 0); + conversationManager.listener.totalUnreadMessageCountChanged(data ?? 0); break; } } else if (call.method == ListenerType.friendListener) { @@ -239,23 +228,19 @@ class IMManager { friendshipManager.listener.friendAdded(u); break; case 'onFriendApplicationAccepted': - final u = Utils.toObj( - data, (map) => FriendApplicationInfo.fromJson(map)); + final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map)); friendshipManager.listener.friendApplicationAccepted(u); break; case 'onFriendApplicationAdded': - final u = Utils.toObj( - data, (map) => FriendApplicationInfo.fromJson(map)); + final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map)); friendshipManager.listener.friendApplicationAdded(u); break; case 'onFriendApplicationDeleted': - final u = Utils.toObj( - data, (map) => FriendApplicationInfo.fromJson(map)); + final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map)); friendshipManager.listener.friendApplicationDeleted(u); break; case 'onFriendApplicationRejected': - final u = Utils.toObj( - data, (map) => FriendApplicationInfo.fromJson(map)); + final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map)); friendshipManager.listener.friendApplicationRejected(u); break; case 'onFriendDeleted': @@ -272,8 +257,7 @@ class IMManager { String data = call.arguments['data']; switch (type) { case 'onRecvCustomBusinessMessage': - messageManager.customBusinessListener - ?.recvCustomBusinessMessage(data); + messageManager.customBusinessListener?.recvCustomBusinessMessage(data); break; } } else if (call.method == ListenerType.messageKvInfoListener) { @@ -281,8 +265,7 @@ class IMManager { String data = call.arguments['data']; switch (type) { case 'onMessageKvInfoChanged': - final list = - Utils.toList(data, (map) => MessageKv.fromJson(map)).toList(); + final list = Utils.toList(data, (map) => MessageKv.fromJson(map)).toList(); messageManager.messageKvInfoListener?.messageKvInfoChanged(list); break; } @@ -291,23 +274,19 @@ class IMManager { String data = call.arguments['data']; switch (type) { case 'onFriendApplicationAccepted': - final u = Utils.toObj( - data, (map) => FriendApplicationInfo.fromJson(map)); + final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map)); _listenerForService?.friendApplicationAccepted(u); break; case 'onFriendApplicationAdded': - final u = Utils.toObj( - data, (map) => FriendApplicationInfo.fromJson(map)); + final u = Utils.toObj(data, (map) => FriendApplicationInfo.fromJson(map)); _listenerForService?.friendApplicationAdded(u); break; case 'onGroupApplicationAccepted': - final i = Utils.toObj( - data, (map) => GroupApplicationInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map)); _listenerForService?.groupApplicationAccepted(i); break; case 'onGroupApplicationAdded': - final i = Utils.toObj( - data, (map) => GroupApplicationInfo.fromJson(map)); + final i = Utils.toObj(data, (map) => GroupApplicationInfo.fromJson(map)); _listenerForService?.groupApplicationAdded(i); break; case 'onRecvNewMessage': @@ -355,8 +334,7 @@ class IMManager { int fileSize = data['fileSize']; int streamSize = data['streamSize']; int storageSize = data['storageSize']; - _uploadFileListener?.uploadProgress( - id, fileSize, streamSize, storageSize); + _uploadFileListener?.uploadProgress(id, fileSize, streamSize, storageSize); break; case 'uploadID': String id = data['id']; @@ -368,14 +346,12 @@ class IMManager { int index = data['index']; int partSize = data['partSize']; String partHash = data['partHash']; - _uploadFileListener?.uploadPartComplete( - id, index, partSize, partHash); + _uploadFileListener?.uploadPartComplete(id, index, partSize, partHash); break; } } } catch (error, stackTrace) { - Logger.print( - "回调失败了。${call.method} ${call.arguments['type']} ${call.arguments['data']} $error $stackTrace"); + Logger.print("回调失败了。${call.method} ${call.arguments['type']} ${call.arguments['data']} $error $stackTrace"); } return Future.value(null); }); @@ -428,7 +404,7 @@ class IMManager { )); } - /// 反初始化SDK + /// 反初始化SDK Future unInitSDK() { return _channel.invokeMethod('unInitSDK', _buildParam({})); } diff --git a/lib/src/models/organization_info.dart b/lib/src/models/organization_info.dart deleted file mode 100644 index 10dc2da..0000000 --- a/lib/src/models/organization_info.dart +++ /dev/null @@ -1,381 +0,0 @@ -/// 部门信息 -class DeptInfo { - /// 部门id - String? departmentID; - - /// 头像 - String? faceURL; - - /// 显示名 - String? name; - - /// 上一级部门id - String? parentID; - - /// 排序方式 - int? order; - - /// 部门类型 - int? departmentType; - - /// 创建时间 - int? createTime; - - /// 子部门数量 - int? subDepartmentNum; - - /// 成员数量 - int? memberNum; - - /// 扩展字段 - String? ex; - - /// 附加信息 - String? attachedInfo; - - String? relatedGroupID; - - DeptInfo( - {this.departmentID, - this.faceURL, - this.name, - this.parentID, - this.order, - this.departmentType, - this.createTime, - this.subDepartmentNum, - this.memberNum, - this.ex, - this.attachedInfo, - this.relatedGroupID}); - - DeptInfo.fromJson(Map json) { - departmentID = json['departmentID']; - faceURL = json['faceURL']; - name = json['name']; - parentID = json['parentID']; - order = json['order']; - departmentType = json['departmentType']; - createTime = json['createTime']; - subDepartmentNum = json['subDepartmentNum']; - memberNum = json['memberNum']; - ex = json['ex']; - attachedInfo = json['attachedInfo']; - relatedGroupID = json['relatedGroupID']; - } - - Map toJson() { - final data = Map(); - data['departmentID'] = this.departmentID; - data['faceURL'] = this.faceURL; - data['name'] = this.name; - data['parentID'] = this.parentID; - data['order'] = this.order; - data['departmentType'] = this.departmentType; - data['createTime'] = this.createTime; - data['subDepartmentNum'] = this.subDepartmentNum; - data['memberNum'] = this.memberNum; - data['ex'] = this.ex; - data['attachedInfo'] = this.attachedInfo; - data['relatedGroupID'] = this.relatedGroupID; - return data; - } - - @override - bool operator ==(Object other) => - identical(this, other) || - other is DeptInfo && - runtimeType == other.runtimeType && - departmentID == other.departmentID; - - @override - int get hashCode => departmentID.hashCode; -} - -/// 部门成员信息 -class DeptMemberInfo { - /// 用户id - String? userID; - - /// 用户昵称 - String? nickname; - - /// 英文名 - String? englishName; - - /// 头像 - String? faceURL; - - /// 性别 - int? gender; - - /// 手机号 - String? mobile; - - /// 座机 - String? telephone; - - /// 出生时间 - int? birth; - - /// 邮箱 - String? email; - - /// 所在部门的id - String? departmentID; - - /// 排序方式 - int? order; - - /// 职位 - String? position; - - /// 是否是领导 - int? leader; - - /// 状态 - int? status; - - /// 创建时间 - int? createTime; - - /// 入职时间 - int? entryTime; - - /// 离职时间 - int? terminationTime; - - /// 扩展字段 - String? ex; - - /// 附加信息 - String? attachedInfo; - - /// 搜索时使用 - String? departmentName; - - /// 所在部门的所有上级部门 - List? parentDepartmentList; - - /// 当前部门信息 - DeptInfo? department; - - DeptMemberInfo({ - this.userID, - this.nickname, - this.englishName, - this.faceURL, - this.gender, - this.mobile, - this.telephone, - this.birth, - this.email, - this.departmentID, - this.order, - this.position, - this.leader, - this.status, - this.createTime, - this.ex, - this.attachedInfo, - this.departmentName, - this.parentDepartmentList, - this.department, - }); - - DeptMemberInfo.fromJson(Map json) { - userID = json['userID']; - nickname = json['nickname']; - englishName = json['englishName']; - faceURL = json['faceURL']; - gender = json['gender']; - mobile = json['mobile']; - telephone = json['telephone']; - birth = json['birth']; - email = json['email']; - departmentID = json['departmentID']; - order = json['order']; - position = json['position']; - leader = json['leader']; - status = json['status']; - createTime = json['createTime']; - ex = json['ex']; - attachedInfo = json['attachedInfo']; - departmentName = json['departmentName']; - if (json['parentDepartmentList'] != null) { - parentDepartmentList = []; - json['parentDepartmentList'].forEach((v) { - parentDepartmentList!.add(DeptInfo.fromJson(v)); - }); - } - department = json['department'] == null - ? null - : DeptInfo.fromJson(json['department']); - } - - Map toJson() { - final Map data = new Map(); - data['userID'] = this.userID; - data['nickname'] = this.nickname; - data['englishName'] = this.englishName; - data['faceURL'] = this.faceURL; - data['gender'] = this.gender; - data['mobile'] = this.mobile; - data['telephone'] = this.telephone; - data['birth'] = this.birth; - data['email'] = this.email; - data['departmentID'] = this.departmentID; - data['order'] = this.order; - data['position'] = this.position; - data['leader'] = this.leader; - data['status'] = this.status; - data['createTime'] = this.createTime; - data['ex'] = this.ex; - data['attachedInfo'] = this.attachedInfo; - data['departmentName'] = this.departmentName; - if (this.parentDepartmentList != null) { - data['parentDepartmentList'] = - this.parentDepartmentList!.map((v) => v.toJson()).toList(); - } - data['department'] = this.department?.toJson(); - return data; - } - - @override - bool operator ==(Object other) => - identical(this, other) || - other is DeptMemberInfo && - runtimeType == other.runtimeType && - userID == other.userID; - - @override - int get hashCode => userID.hashCode; -} - -/// 用户所在的部门 -class UserInDept { - /// 部门信息 - DeptInfo? department; - - /// 所在部门自己的信息 - DeptMemberInfo? member; - - UserInDept({this.department, this.member}); - - UserInDept.fromJson(Map json) { - department = json['department'] != null - ? DeptInfo.fromJson(json['department']) - : null; - member = - json['member'] != null ? DeptMemberInfo.fromJson(json['member']) : null; - } - - Map toJson() { - final data = Map(); - if (this.department != null) { - data['department'] = this.department!.toJson(); - } - if (this.member != null) { - data['member'] = this.member!.toJson(); - } - return data; - } -} - -/// 部门下的一级子部门跟员工 -class DeptMemberAndSubDept { - /// 一级子部门 - List? departmentList; - - /// 一级成员 - List? departmentMemberList; - - /// 当前部门的所有上一级部门 - List? parentDepartmentList; - - DeptMemberAndSubDept({ - this.departmentList, - this.departmentMemberList, - this.parentDepartmentList, - }); - - DeptMemberAndSubDept.fromJson(Map json) { - if (json['departmentList'] != null) { - departmentList = []; - json['departmentList'].forEach((v) { - departmentList!.add(DeptInfo.fromJson(v)); - }); - } - if (json['departmentMemberList'] != null) { - departmentMemberList = []; - json['departmentMemberList'].forEach((v) { - departmentMemberList!.add(DeptMemberInfo.fromJson(v)); - }); - } - if (json['parentDepartmentList'] != null) { - parentDepartmentList = []; - json['parentDepartmentList'].forEach((v) { - parentDepartmentList!.add(DeptInfo.fromJson(v)); - }); - } - } - - Map toJson() { - final data = Map(); - if (this.departmentList != null) { - data['departmentList'] = - this.departmentList!.map((v) => v.toJson()).toList(); - } - if (this.departmentMemberList != null) { - data['departmentMemberList'] = - this.departmentMemberList!.map((v) => v.toJson()).toList(); - } - if (this.parentDepartmentList != null) { - data['parentDepartmentList'] = - this.parentDepartmentList!.map((v) => v.toJson()).toList(); - } - return data; - } -} - -/// 搜索结果 -class OrganizationSearchResult { - /// 部门列表 - List? departmentList; - - /// 部门成员列表 - List? departmentMemberList; - - OrganizationSearchResult({ - this.departmentList, - this.departmentMemberList, - }); - - OrganizationSearchResult.fromJson(Map json) { - if (json['departmentList'] != null) { - departmentList = []; - json['departmentList'].forEach((v) { - departmentList!.add(DeptInfo.fromJson(v)); - }); - } - if (json['departmentMemberList'] != null) { - departmentMemberList = []; - json['departmentMemberList'].forEach((v) { - departmentMemberList!.add(DeptMemberInfo.fromJson(v)); - }); - } - } - - Map toJson() { - final data = Map(); - if (this.departmentList != null) { - data['departmentList'] = - this.departmentList!.map((v) => v.toJson()).toList(); - } - if (this.departmentMemberList != null) { - data['departmentMemberList'] = - this.departmentMemberList!.map((v) => v.toJson()).toList(); - } - return data; - } -} diff --git a/lib/src/models/signaling_info.dart b/lib/src/models/signaling_info.dart deleted file mode 100644 index c92bacc..0000000 --- a/lib/src/models/signaling_info.dart +++ /dev/null @@ -1,245 +0,0 @@ -import 'dart:io'; - -import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; - -class SignalingInfo { - /// 操作者 - String? userID; - - /// 邀请信息 - InvitationInfo? invitation; - - /// 离线显示内容 - OfflinePushInfo? offlinePushInfo; - - SignalingInfo({ - this.userID, - this.invitation, - this.offlinePushInfo, - }); - - SignalingInfo.fromJson(Map json) { - invitation = json['invitation'] == null - ? null - : InvitationInfo.fromJson(json['invitation']); - offlinePushInfo = json['offlinePushInfo'] == null - ? null - : OfflinePushInfo.fromJson(json['offlinePushInfo']); - userID = json['userID'] ?? invitation?.inviterUserID; - } - - Map toJson() { - final data = Map(); - data['userID'] = this.userID; - data['invitation'] = this.invitation?.toJson(); - data['offlinePushInfo'] = this.offlinePushInfo?.toJson(); - return data; - } -} - -class InvitationInfo { - /// 邀请者UserID - String? inviterUserID; - - /// 被邀请者UserID列表,如果是单聊只有一个元素 - List? inviteeUserIDList; - - /// 如果是单聊,为"" - String? groupID; - - /// 房间ID,必须唯一,可以不设置。 - String? roomID; - - /// 邀请超时时间(秒) - int? timeout; - - /// 发起时间 - int? initiateTime; - - /// video 或者 audio - String? mediaType; - - /// [ConversationType]1为单聊,2为群聊 - int? sessionType; - - /// 平台[Platform] - int? platformID; - - InvitationInfo( - {this.inviterUserID, - this.inviteeUserIDList, - this.groupID, - this.roomID, - this.timeout, - this.initiateTime, - this.mediaType, - this.sessionType, - this.platformID}); - - InvitationInfo.fromJson(Map json) { - inviterUserID = json['inviterUserID']; - inviteeUserIDList = json['inviteeUserIDList']?.cast(); - groupID = json['groupID']; - roomID = json['roomID']; - timeout = json['timeout']; - initiateTime = json['initiateTime']; - mediaType = json['mediaType']; - sessionType = json['sessionType']; - platformID = json['platformID']; - } - - Map toJson() { - final data = Map(); - data['inviterUserID'] = this.inviterUserID; - data['inviteeUserIDList'] = this.inviteeUserIDList; - data['groupID'] = this.groupID; - data['roomID'] = this.roomID; - data['timeout'] = this.timeout; - data['initiateTime'] = this.initiateTime; - data['mediaType'] = this.mediaType; - data['sessionType'] = this.sessionType; - data['platformID'] = this.platformID; - return data; - } -} - -/// 信令凭证 -class SignalingCertificate { - /// 登录token - String? token; - - /// 房间id - String? roomID; - - /// 服务器地址 - String? liveURL; - - /// 占线列表 - List? busyLineUserIDList; - - SignalingCertificate({ - this.token, - this.roomID, - this.liveURL, - this.busyLineUserIDList, - }); - - SignalingCertificate.fromJson(Map json) { - token = json['token']; - roomID = json['roomID']; - liveURL = json['liveURL']; - busyLineUserIDList = null == json['busyLineUserIDList'] - ? null - : json['busyLineUserIDList'].cast(); - } - - Map toJson() { - final data = Map(); - data['token'] = this.token; - data['roomID'] = this.roomID; - data['liveURL'] = this.liveURL; - data['busyLineUserIDList'] = this.busyLineUserIDList; - return data; - } -} - -class RoomCallingInfo { - InvitationInfo? invitation; - List? participant; - String? roomID; - String? token; - String? liveURL; - String? groupID; - - RoomCallingInfo({ - this.invitation, - this.participant, - this.roomID, - this.token, - this.liveURL, - this.groupID, - }); - - RoomCallingInfo.fromJson(Map json) { - invitation = json['invitation'] != null - ? InvitationInfo.fromJson(json['invitation']) - : null; - if (json['participant'] != null) { - participant = []; - json['participant'].forEach((v) { - participant!.add(Participant.fromJson(v)); - }); - } - roomID = json['roomID'] ?? invitation?.roomID; - token = json['token']; - liveURL = json['liveURL']; - groupID = json['groupID']; - } - - Map toJson() { - final data = Map(); - if (this.invitation != null) { - data['invitation'] = this.invitation!.toJson(); - } - if (this.participant != null) { - data['participant'] = this.participant!.map((v) => v.toJson()).toList(); - } - data['roomID'] = this.roomID; - data['token'] = this.token; - data['liveURL'] = this.liveURL; - data['groupID'] = this.groupID; - return data; - } -} - -class Participant { - GroupInfo? groupInfo; - GroupMembersInfo? groupMemberInfo; - UserInfo? userInfo; - - Participant({this.groupInfo, this.groupMemberInfo, this.userInfo}); - - Participant.fromJson(Map json) { - groupInfo = json['groupInfo'] != null - ? GroupInfo.fromJson(json['groupInfo']) - : null; - groupMemberInfo = json['groupMemberInfo'] != null - ? GroupMembersInfo.fromJson(json['groupMemberInfo']) - : null; - userInfo = - json['userInfo'] != null ? UserInfo.fromJson(json['userInfo']) : null; - } - - Map toJson() { - final data = Map(); - if (this.groupInfo != null) { - data['groupInfo'] = this.groupInfo!.toJson(); - } - if (this.groupMemberInfo != null) { - data['groupMemberInfo'] = this.groupMemberInfo!.toJson(); - } - if (this.userInfo != null) { - data['userInfo'] = this.userInfo!.toJson(); - } - return data; - } -} - -class CustomSignaling { - String? roomID; - String? customInfo; - - CustomSignaling({this.roomID, this.customInfo}); - - CustomSignaling.fromJson(Map json) { - roomID = json['roomID']; - customInfo = json['customInfo']; - } - - Map toJson() { - final data = Map(); - data['roomID'] = roomID; - data['customInfo'] = customInfo; - return data; - } -} diff --git a/lib/src/models/user_info.dart b/lib/src/models/user_info.dart index 917cd6a..f141ec1 100644 --- a/lib/src/models/user_info.dart +++ b/lib/src/models/user_info.dart @@ -551,3 +551,34 @@ class FriendApplicationInfo { /// 已拒绝 bool get isRejected => handleResult == -1; } + +class UserStatusInfo { + /// 用户id + String? userID; + + /// 状态 + int? status; + + /// 平台ID + List? platformIDs; + + UserStatusInfo({ + this.userID, + this.status, + this.platformIDs, + }); + + UserStatusInfo.fromJson(Map json) { + userID = json['userID']; + status = json['status']; + platformIDs = json['platformIDs']; + } + + Map toJson() { + final data = Map(); + data['userID'] = this.userID; + data['status'] = this.status; + data['platformIDs'] = this.platformIDs; + return data; + } +}