import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; class GroupManager { MethodChannel _channel; late OnGroupListener listener; GroupManager(this._channel); /// 组关系监听 Future setGroupListener(OnGroupListener listener) { this.listener = listener; return _channel.invokeMethod('setGroupListener', _buildParam({})); } /// 邀请进组,直接进组无需同意。 /// [groupId] 组ID /// [uidList] 用户ID列表 Future> inviteUserToGroup({ required String groupId, required List uidList, String? reason, String? operationID, }) => _channel .invokeMethod( 'inviteUserToGroup', _buildParam({ 'gid': groupId, 'reason': reason, 'uidList': uidList, "operationID": Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupInviteResult.fromJson(map))); /// 移除组成员 /// [groupId] 组ID /// [uidList] 用户ID列表 /// [reason] 备注说明 Future> kickGroupMember({ required String groupId, required List uidList, String? reason, String? operationID, }) => _channel .invokeMethod( 'kickGroupMember', _buildParam({ 'gid': groupId, 'reason': reason, 'uidList': uidList, "operationID": Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupInviteResult.fromJson(map))); /// 查询组成员资料 /// [groupId] 组ID /// [uidList] 用户ID列表 Future> getGroupMembersInfo({ required String groupId, required List uidList, String? operationID, }) => _channel .invokeMethod( 'getGroupMembersInfo', _buildParam({ 'gid': groupId, 'uidList': uidList, "operationID": Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupMembersInfo.fromJson(map))); /// 分页获取组成员列表 /// [groupId] 群ID /// [filter] 过滤成员 1普通成员, 2群主,3管理员,0 所有 /// [offset] 开始下标 /// [count] 总数 Future> getGroupMemberList({ required String groupId, int filter = 0, int offset = 0, int count = 0, String? operationID, }) => _channel .invokeMethod( 'getGroupMemberList', _buildParam({ 'gid': groupId, 'filter': filter, 'offset': offset, 'count': count, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupMembersInfo.fromJson(map))); /// 分页获取组成员列表 /// [groupId] 群ID /// [filter] 过滤成员 1普通成员, 2群主,3管理员,0所有 /// [offset] 开始下标 /// [count] 总数 Future> getGroupMemberListMap({ required String groupId, int filter = 0, int offset = 0, int count = 0, String? operationID, }) => _channel .invokeMethod( 'getGroupMemberList', _buildParam({ 'gid': groupId, 'filter': filter, 'offset': offset, 'count': count, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toListMap(value)); /// 查询已加入的组列表 Future> getJoinedGroupList({String? operationID}) => _channel .invokeMethod( 'getJoinedGroupList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupInfo.fromJson(map))); /// 查询已加入的组列表 Future> getJoinedGroupListMap({String? operationID}) => _channel .invokeMethod( 'getJoinedGroupList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toListMap(value)); /// 检查是否已加入组 /// [gid] 组ID Future isJoinedGroup({ required String gid, String? operationID, }) => getJoinedGroupList( operationID: Utils.checkOperationID(operationID), ).then((list) => list.where((e) => e.groupID == gid).length > 0); /// 创建一个组 /// [groupName] 群名 /// [notification] 公告 /// [introduction] 群介绍 /// [faceUrl] 群头像 /// [groupType] 组类型 /// [ex] 额外信息 /// [list] 初创群成员以及其角色列表,角色参考[GroupRoleLevel]类 Future createGroup({ String? groupName, String? notification, String? introduction, String? faceUrl, int? groupType, String? ex, required List list, String? operationID, }) => _channel .invokeMethod( 'createGroup', _buildParam({ 'gInfo': { "groupName": groupName, "notification": notification, "introduction": introduction, "faceURL": faceUrl, "groupType": groupType, "ex": ex, }, 'memberList': list.map((e) => e.toJson()).toList(), 'operationID': Utils.checkOperationID(operationID), })) .then( (value) => Utils.toObj(value, (map) => GroupInfo.fromJson(map))); /// 编辑组资料 /// [groupID] 被编辑的群ID /// [groupName] 新的群名 /// [notification] 新的公告 /// [introduction] 新的群介绍 /// [faceUrl] 新的群头像 /// [ex] 新的额外信息 Future setGroupInfo({ required String groupID, String? groupName, String? notification, String? introduction, String? faceUrl, String? ex, String? operationID, }) => _channel.invokeMethod( 'setGroupInfo', _buildParam({ "gid": groupID, 'gInfo': { // "groupID": groupID, "groupName": groupName, "notification": notification, "introduction": introduction, "faceURL": faceUrl, "ex": ex, }, 'operationID': Utils.checkOperationID(operationID), })); /// 查询组信息 /// [gidList] 组ID列表 Future> getGroupsInfo({ required List gidList, String? operationID, }) => _channel .invokeMethod( 'getGroupsInfo', _buildParam({ 'gidList': gidList, 'operationID': Utils.checkOperationID(operationID), })) .then( (value) => Utils.toList(value, (map) => GroupInfo.fromJson(map))); /// 申请加入组,需要通过管理员/群组同意。 Future joinGroup({ required String gid, String? reason, String? operationID, }) => _channel.invokeMethod( 'joinGroup', _buildParam({ 'gid': gid, 'reason': reason, 'operationID': Utils.checkOperationID(operationID), })); /// 退出组 Future quitGroup({ required String gid, String? operationID, }) => _channel.invokeMethod( 'quitGroup', _buildParam({ 'gid': gid, 'operationID': Utils.checkOperationID(operationID), })); /// 转移组拥有者权限 /// [gid] 组ID /// [uid] 新拥有者ID Future transferGroupOwner({ required String gid, required String uid, String? operationID, }) => _channel.invokeMethod( 'transferGroupOwner', _buildParam({ 'gid': gid, 'uid': uid, 'operationID': Utils.checkOperationID(operationID), })); /// 作为群主或者管理员,收到的群成员入群申请 Future> getRecvGroupApplicationList( {String? operationID}) => _channel .invokeMethod( 'getRecvGroupApplicationList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupApplicationInfo.fromJson(map))); /// 获取自己发出的入群申请记录 Future> getSendGroupApplicationList( {String? operationID}) => _channel .invokeMethod( 'getSendGroupApplicationList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupApplicationInfo.fromJson(map))); /// 管理员或者群主同意某人进入某群 /// 注:主动申请入群需要通过管理员/群组处理,被别人拉入群不需要管理员/群组处理 /// [gid] 组id /// [uid] 申请者用户ID Future acceptGroupApplication({ required String gid, required String uid, String? handleMsg, String? operationID, }) => _channel.invokeMethod( 'acceptGroupApplication', _buildParam({ 'gid': gid, 'uid': uid, 'handleMsg': handleMsg, 'operationID': Utils.checkOperationID(operationID), })); /// 管理员或者群主拒绝某人进入某群 /// 注:主动申请入群需要通过管理员/群组处理,被别人拉入群不需要管理员/群组处理 /// [gid] 组id /// [uid] 申请者用户ID /// [handleMsg] 说明 Future refuseGroupApplication({ required String gid, required String uid, String? handleMsg, String? operationID, }) => _channel.invokeMethod( 'refuseGroupApplication', _buildParam({ 'gid': gid, 'uid': uid, 'handleMsg': handleMsg, 'operationID': Utils.checkOperationID(operationID), })); /// 解散群 /// [groupID] 群ID Future dismissGroup({ required String groupID, String? operationID, }) => _channel.invokeMethod( 'dismissGroup', _buildParam({ 'gid': groupID, 'operationID': Utils.checkOperationID(operationID), })); /// 开启群禁言,所有群成员禁止发言 /// [groupID] 将开启群禁言的组ID /// [mute] true:开启,false:关闭 Future changeGroupMute({ required String groupID, required bool mute, String? operationID, }) => _channel.invokeMethod( 'changeGroupMute', _buildParam({ 'gid': groupID, 'mute': mute, 'operationID': Utils.checkOperationID(operationID), })); /// 禁言群成员 /// [groupID] 群ID /// [userID] 将被禁言的成员ID /// [seconds] 被禁言的时间s,设置为0则为解除禁言 Future changeGroupMemberMute({ required String groupID, required String userID, int seconds = 0, String? operationID, }) => _channel.invokeMethod( 'changeGroupMemberMute', _buildParam({ 'gid': groupID, 'uid': userID, 'seconds': seconds, 'operationID': Utils.checkOperationID(operationID), })); /// 设置群成员昵称 /// [groupID] 群ID /// [userID] 群成员的用户ID /// [groupNickname] 群昵称 Future setGroupMemberNickname({ required String groupID, required String userID, String? groupNickname, String? operationID, }) => _channel.invokeMethod( 'setGroupMemberNickname', _buildParam({ 'gid': groupID, 'uid': userID, 'groupNickname': groupNickname ?? '', 'operationID': Utils.checkOperationID(operationID), })); /// 查询群 /// [keywordList] 搜索关键词,目前仅支持一个关键词搜索,不能为空 /// [isSearchGroupID] 是否以关键词搜索群ID(注:两个不可以同时为false),为空默认false /// [isSearchGroupName] 是否以关键词搜索群名字,为空默认false Future> searchGroups({ List 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))); /// 设置群成员权限 /// [groupID] 群ID /// [userID] 群成员的用户ID /// [roleLevel] 角色等级,参考[GroupRoleLevel] Future setGroupMemberRoleLevel({ required String groupID, required String userID, required int roleLevel, String? operationID, }) => _channel.invokeMethod( 'setGroupMemberRoleLevel', _buildParam({ 'groupID': groupID, 'userID': userID, 'roleLevel': roleLevel, 'operationID': Utils.checkOperationID(operationID), })); /// 根据加入时间分页获取组成员列表 /// [groupID] 群ID /// [joinTimeBegin] 加入开始时间 /// [joinTimeEnd] 加入结束时间 /// [offset] 开始下标 /// [count] 总数 Future> getGroupMemberListByJoinTime({ required String groupID, int offset = 0, int count = 0, int joinTimeBegin = 0, int joinTimeEnd = 0, List excludeUserIDList = const [], String? operationID, }) => _channel .invokeMethod( 'getGroupMemberListByJoinTimeFilter', _buildParam({ 'groupID': groupID, 'offset': offset, 'count': count, 'joinTimeBegin': joinTimeBegin, 'joinTimeEnd': joinTimeEnd, 'excludeUserIDList': excludeUserIDList, 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupMembersInfo.fromJson(map))); /// 设置群成员权限 /// [groupID] 群ID /// [needVerification] 进群设置,参考[GroupVerification]类 Future setGroupVerification({ required String groupID, required int needVerification, String? operationID, }) => _channel.invokeMethod( 'setGroupVerification', _buildParam({ 'groupID': groupID, 'needVerification': needVerification, 'operationID': Utils.checkOperationID(operationID), })); static Map _buildParam(Map param) { param["ManagerName"] = "groupManager"; return param; } }