import 'package:flutter/services.dart'; import 'package:flutter_openim_sdk/flutter_openim_sdk.dart'; class GroupManager { MethodChannel _channel; late OnGroupListener listener; GroupManager(this._channel); /// Set up group relationship monitoring /// 组关系监听 Future setGroupListener(OnGroupListener listener) { this.listener = listener; return _channel.invokeMethod('setGroupListener', _buildParam({})); } /// Invite friends into the group /// 邀请进组,直接进组无需同意。 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))); /// Remove member from group /// 移除组成员 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))); /// Get group member's info /// 查询组成员资料 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))); /// Get the list of group members /// 分页获取组成员列表 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))); /// Get the list of group members /// 分页获取组成员列表 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)); /// Find all groups you have joined /// 查询已加入的组列表 Future> getJoinedGroupList({String? operationID}) => _channel .invokeMethod( 'getJoinedGroupList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupInfo.fromJson(map))); /// Find all groups you have joined /// 查询已加入的组列表 Future> getJoinedGroupListMap({String? operationID}) => _channel .invokeMethod( 'getJoinedGroupList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toListMap(value)); /// Check if you are a member of the group /// 检查是否已加入组 Future isJoinedGroup({ required String gid, String? operationID, }) => getJoinedGroupList( operationID: Utils.checkOperationID(operationID), ).then((list) => list.where((e) => e.groupID == gid).length > 0); /// Create a group /// 创建一个组 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))); /// Edit group information /// 编辑组资料 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), })); /// Find group information by group 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))); /// Apply to join the group /// 申请加入组,需要通过管理员同意。 Future joinGroup({ required String gid, String? reason, String? operationID, }) => _channel.invokeMethod( 'joinGroup', _buildParam({ 'gid': gid, 'reason': reason, 'operationID': Utils.checkOperationID(operationID), })); /// Leave group /// 退出组 Future quitGroup({ required String gid, String? operationID, }) => _channel.invokeMethod( 'quitGroup', _buildParam({ 'gid': gid, 'operationID': Utils.checkOperationID(operationID), })); /// Give group permissions to others /// 转移组拥有者权限 Future transferGroupOwner({ required String gid, required String uid, String? operationID, }) => _channel.invokeMethod( 'transferGroupOwner', _buildParam({ 'gid': gid, 'uid': uid, 'operationID': Utils.checkOperationID(operationID), })); /// As the group owner or administrator, get the list of received group members' applications to join the group. /// 作为群主或者管理员,获取收到的群成员申请进群列表。 Future> getRecvGroupApplicationList( {String? operationID}) => _channel .invokeMethod( 'getRecvGroupApplicationList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupApplicationInfo.fromJson(map))); /// Get the record of the group membership application issued by yourself /// 获取自己发出的入群申请记录 Future> getSendGroupApplicationList( {String? operationID}) => _channel .invokeMethod( 'getSendGroupApplicationList', _buildParam({ 'operationID': Utils.checkOperationID(operationID), })) .then((value) => Utils.toList(value, (map) => GroupApplicationInfo.fromJson(map))); /// Accept group application /// 管理员或者群主同意某人进入某群 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), })); /// Refuse group application /// 管理员或者群主拒绝某人进入某群 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), })); /// Dissmiss group /// 解散群 Future dismissGroup({ required String groupID, String? operationID, }) => _channel.invokeMethod( 'dismissGroup', _buildParam({ 'gid': groupID, 'operationID': Utils.checkOperationID(operationID), })); /// Enable group mute /// 开启群禁言 Future changeGroupMute({ required String groupID, required bool mute, String? operationID, }) => _channel.invokeMethod( 'changeGroupMute', _buildParam({ 'gid': groupID, 'mute': mute, 'operationID': Utils.checkOperationID(operationID), })); /// Mute group members /// 禁言群成员 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), })); /// Set group user nickname /// 设置群成员昵称 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), })); static Map _buildParam(Map param) { param["ManagerName"] = "groupManager"; return param; } }