import 'package:adaptive_dialog/adaptive_dialog.dart'; import 'package:chat/models/im/group_conversation_model.dart'; import 'package:chat/services/auth_service.dart'; import 'package:chat/services/tim/conversation_service.dart'; import 'package:chat/services/tim/group_service.dart'; import 'package:chat/services/tim_service.dart'; import 'package:chat/utils/ui_tools.dart'; import 'package:get/get.dart'; import 'package:tencent_im_sdk_plugin/enum/group_member_filter_enum.dart'; import 'package:tencent_im_sdk_plugin/enum/group_member_role.dart'; import 'package:tencent_im_sdk_plugin/enum/group_member_role_enum.dart'; import 'package:tencent_im_sdk_plugin/models/v2_tim_group_member_full_info.dart'; class GroupController extends GetxController { static GroupController get to => Get.find(); Rx currentGroup = GroupConversationModel(groupID: '').obs; @override void onClose() { currentGroup.value = GroupConversationModel(groupID: ''); TimService.to.currentConversationId.value = ''; super.onClose(); } /// 设置当前操作的群组 Future setCurrentGroup(String groupId) async { var group = await TimGroupService.to.info(groupId); if (group != null) { TimService.to.currentConversationId.value = 'group_' + groupId; currentGroup.value.group = group; currentGroup.value.groupID = groupId; var selfInfo = await TimGroupService.to.getMemberInfo( group, AuthService.to.userId, ); if (selfInfo?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN) { currentGroup.value.isAdmin = true; } if (selfInfo?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER) { currentGroup.value.isOwner = true; } currentGroup.value.selfInfo = await TimGroupService.to.getMemberInfo( group, AuthService.to.userId, ); currentGroup.value.conversation = await TimConversationService.to.getById( 'group_' + groupId, ); currentGroup.refresh(); } } /// 获取群成员列表 Future fetchGroupMemberList() async { var members = await TimGroupService.to.members( currentGroup.value.groupID, count: 13, ); currentGroup.value.memberList = members; var admins = await TimGroupService.to.members( currentGroup.value.groupID, count: 100, filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ADMIN, ); currentGroup.value.adminList = admins; currentGroup.refresh(); } /// 更新群名称 Future updateGroupName(String name) async { var result = await TimGroupService.to.updateName( currentGroup.value.group!, name, ); if (result) { currentGroup.value.group!.groupName = name; currentGroup.value.conversation!.showName = name; currentGroup.refresh(); UiTools.toast('群名称修改成功'); Get.back(); } } /// 更新我的群名片 Future updateGroupNameCard(String nameCard) async { var res = await TimGroupService.to.setMemberInfo( currentGroup.value.group!, AuthService.to.userId, nameCard, ); if (res) { currentGroup.value.selfInfo!.nameCard = nameCard; currentGroup.refresh(); UiTools.toast('群名片修改成功'); Get.back(); } } Future updateGroupNotification(String notification) async { var res = await TimGroupService.to.updateNotification( currentGroup.value.group!, notification, ); if (res) { currentGroup.value.group!.notification = notification; currentGroup.refresh(); UiTools.toast('群公告更新成功'); Get.back(); } } Future togglePinned() async { var res = await TimConversationService.to.setOnTop( currentGroup.value.conversation!, ); if (res) { currentGroup.value.conversation = await TimConversationService.to.getById( 'group_' + currentGroup.value.groupID, ); currentGroup.refresh(); UiTools.toast('修改成功'); } } Future toggleReceiveOpt() async { var res = await TimConversationService.to.setReceiveOpt( currentGroup.value.conversation!, ); if (res) { currentGroup.value.conversation = await TimConversationService.to.getById( 'group_' + currentGroup.value.groupID, ); currentGroup.refresh(); UiTools.toast('修改成功'); } } /// 移除群成员 Future kick(List ids) async { var result = await TimGroupService.to.kickMember( GroupController.to.currentGroup.value.group!, ids, ); if (result) { setCurrentGroup(currentGroup.value.groupID); fetchGroupMemberList(); } return result; } Future transfer(V2TimGroupMemberFullInfo member) async { OkCancelResult result = await showOkCancelAlertDialog( style: AdaptiveStyle.iOS, context: Get.context!, title: '操作提示', message: '确定选择 ${member.nickName} 为新群主,您将自动放弃群主身份。', okLabel: '确定', cancelLabel: '取消', defaultType: OkCancelAlertDefaultType.ok, ); if (result == OkCancelResult.ok) { var res = await TimGroupService.to.transfer( currentGroup.value.group!, member.userID, ); if (res) { /// 直接修改当前用户的身份,为普通用户 currentGroup.value.isAdmin = false; currentGroup.value.isOwner = false; await fetchGroupMemberList(); } return res; } return false; } Future setAdmin(String userID) async { var result = await TimGroupService.to.setMemberRole( currentGroup.value.group!, userID, GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_ADMIN, ); if (result) { UiTools.toast('设置群管理成功'); } return result; } Future cancelAdmin(String userID) async { var result = await TimGroupService.to.setMemberRole( currentGroup.value.group!, userID, GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_MEMBER, ); if (result) { UiTools.toast('取消群管理成功'); } return result; } }