flutter/lib/pages/groupChat/controller/group_detail_controller.dart
2025-09-13 17:01:01 +08:00

149 lines
4.7 KiB
Dart
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import 'package:get/get.dart';
import 'package:loopin/IM/controller/im_user_info_controller.dart';
import 'package:loopin/IM/im_service.dart';
import 'package:loopin/components/my_toast.dart';
import 'package:tencent_cloud_chat_sdk/enum/group_member_filter_enum.dart';
import 'package:tencent_cloud_chat_sdk/enum/group_type.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart';
class GroupDetailController extends GetxController {
// 群ID
final String groupID;
GroupDetailController({required this.groupID});
// 群资料
Rxn<V2TimGroupInfo> info = Rxn<V2TimGroupInfo>();
// 群成员列表
RxList<V2TimGroupMemberFullInfo> memberList = <V2TimGroupMemberFullInfo>[].obs;
// 自己在群里的信息
Rxn<V2TimGroupMemberFullInfo> selfInfo = Rxn<V2TimGroupMemberFullInfo>();
// 是否是群主
RxBool isOwner = false.obs;
Future<void> init() async {
await getSelfInfo();
await getGroupData();
await getMemberData(); // 最后在拉取成员信息
canRemoveMembers();
}
// 修改群资料
Future<void> setGroupInfo({required V2TimGroupInfo changedInfo}) async {
if (isOwner.value && info.value != null) {
final res = await ImService.instance.setGroupInfo(info: changedInfo);
if (!res.success) {
// 修改失败重新获取info
MyToast().tip(title: '请稍后再试');
getGroupData();
} else {
// info.value?.faceUrl = changedInfo.faceUrl;
final current = info.value!;
if (changedInfo.faceUrl != null) current.faceUrl = changedInfo.faceUrl;
if (changedInfo.groupName != null) current.groupName = changedInfo.groupName;
if (changedInfo.introduction != null) current.introduction = changedInfo.introduction;
if (changedInfo.notification != null) current.notification = changedInfo.notification;
info.refresh();
}
}
}
// 获取群资料
Future<void> getGroupData() async {
final res = await ImService.instance.getGroupsInfo(groupIDList: [groupID]);
if (res.success && res.data != null) {
info.value = res.data!.first.groupInfo ?? V2TimGroupInfo(groupID: groupID, groupType: GroupType.Work);
}
}
//群成员(这里非群主拿14个群住拿13个)
Future<void> getMemberData() async {
final res = await ImService.instance.getGroupMemberList(
groupID: groupID,
filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ALL,
nextSeq: "0",
count: isOwner.value ? 13 : 14,
);
if (res.success && res.data != null) {
memberList.value = res.data!.memberInfoList ?? [];
}
}
// 自己的群资料
Future<void> getSelfInfo() async {
final selfID = Get.find<ImUserInfoController>().userID.value;
final res = await ImService.instance.getGroupMembersInfo(
groupID: groupID,
memberList: [selfID],
);
if (res.success && res.data != null) {
selfInfo.value = res.data!.first;
}
}
// 设置自己的群资料
Future<void> setSelfInfo({required String nameCard}) async {
final res = await ImService.instance.setGroupMemberInfo(
groupID: groupID,
userID: selfInfo.value?.userID ?? '',
nameCard: nameCard,
);
if (!res.success) {
MyToast().tip(title: '设置失败', position: 'top');
} else {
selfInfo.value?.nameCard = nameCard;
selfInfo.refresh();
}
}
// 邀请进群 inviteUserToGroup
Future<void> inviteUserToGroup({required List<String> userList}) async {
final res = await ImService.instance.inviteUserToGroup(
groupID: groupID,
userList: userList,
);
if (res.success && res.data != null) {
refresh();
}
}
// 退出群聊
Future<void> quitGroup() async {
final res = await ImService.instance.quitGroup(
groupID: groupID,
);
if (res.success) {
refresh();
}
}
// 踢人 inviteUserToGroup
Future<void> kickGroupMember(List<String> userIDs) async {
await ImService.instance.kickGroupMember(
groupID: groupID,
memberList: userIDs,
);
}
// 踢人权限
void canRemoveMembers() {
final owner = info.value?.owner;
final myID = selfInfo.value?.userID;
final myRole = selfInfo.value?.role;
if (owner == null || myID == null || myRole == null) {
isOwner.value = false;
} else if (owner == myID) {
isOwner.value = true;
} else if ([300, 400].contains(myRole)) {
isOwner.value = true;
} else {
isOwner.value = false;
}
// role=200普通 300管理 400群主
// if (owner == myID) result = true;
// if ([300, 400].contains(myRole)) result = true;
// isOwner
// return false;
}
}