Optimize the logic for retrieving the group member list when monitoring group members entering and leaving.
This commit is contained in:
parent
214558c7f4
commit
25a7c0e990
|
|
@ -1,3 +1,6 @@
|
|||
# 5.0.1+4
|
||||
* Optimize the logic for retrieving the group member list when monitoring group members entering and leaving.
|
||||
|
||||
# 5.0.1+3
|
||||
* Optimize UI refresh timing when joining a call midway.
|
||||
|
||||
|
|
|
|||
|
|
@ -25,12 +25,12 @@ import 'package:tencent_cloud_chat_uikit/data_services/group/group_services.dart
|
|||
import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart';
|
||||
import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart';
|
||||
|
||||
enum UpdateType { groupInfo, memberList, joinApplicationList, groupDismissed, kickedFromGroup }
|
||||
enum UpdateType { groupInfo, memberEnter, memberLeave, joinApplicationList, groupDismissed, kickedFromGroup }
|
||||
|
||||
class NeedUpdate {
|
||||
final String groupID;
|
||||
final UpdateType updateType;
|
||||
final String extraData;
|
||||
final dynamic extraData;
|
||||
int? groupInfoSubType;
|
||||
String? ownerID;
|
||||
|
||||
|
|
@ -55,7 +55,7 @@ class TUIGroupListenerModel extends ChangeNotifier {
|
|||
|
||||
TUIGroupListenerModel() {
|
||||
_groupListener = V2TimGroupListener(onMemberInvited: (groupID, opUser, memberList) {
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.memberList, "");
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.memberEnter, memberList);
|
||||
notifyListeners();
|
||||
}, onMemberKicked: (groupID, opUser, memberList) async {
|
||||
if (_isLoginUserKickedFromGroup(groupID, memberList)) {
|
||||
|
|
@ -66,10 +66,10 @@ class TUIGroupListenerModel extends ChangeNotifier {
|
|||
notifyListeners();
|
||||
}
|
||||
}, onMemberEnter: (String groupID, List<V2TimGroupMemberInfo> memberList) {
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.memberList, "");
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.memberEnter, memberList);
|
||||
notifyListeners();
|
||||
}, onMemberLeave: (String groupID, V2TimGroupMemberInfo member) {
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.memberList, "");
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.memberLeave, [member]);
|
||||
notifyListeners();
|
||||
}, onGroupInfoChanged: (groupID, changeInfos) {
|
||||
_needUpdate = NeedUpdate(groupID, UpdateType.groupInfo, "");
|
||||
|
|
|
|||
|
|
@ -24,6 +24,8 @@ import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'
|
|||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_info.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'
|
||||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_full_info.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info.dart'
|
||||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_info.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_message_read_member_list.dart'
|
||||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_message_read_member_list.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'
|
||||
|
|
@ -585,6 +587,34 @@ class TUIChatSeparateViewModel extends ChangeNotifier {
|
|||
}
|
||||
}
|
||||
|
||||
void processGroupMemberListEnter({required String groupID, required List<V2TimGroupMemberInfo> memberList}) async {
|
||||
final List<V2TimGroupMemberFullInfo> fullInfoList = memberList
|
||||
.where((member) => member.userID != null)
|
||||
.map((member) {
|
||||
return V2TimGroupMemberFullInfo(
|
||||
userID: member.userID!,
|
||||
nickName: member.nickName,
|
||||
nameCard: member.nameCard,
|
||||
friendRemark: member.friendRemark,
|
||||
faceUrl: member.faceUrl,
|
||||
onlineDevices: member.onlineDevices,
|
||||
);
|
||||
}).toList();
|
||||
|
||||
for (final fullInfo in fullInfoList) {
|
||||
final exists = groupMemberList?.any((e) => e?.userID == fullInfo.userID) ?? false;
|
||||
if (!exists) {
|
||||
groupMemberList = [...?groupMemberList, fullInfo];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void processGroupMemberListLeave({required String groupID, required List<V2TimGroupMemberInfo> memberList}) async {
|
||||
final Set<String?> userIDsToRemove = memberList.map((member) => member.userID).toSet();
|
||||
|
||||
groupMemberList?.removeWhere((member) => userIDsToRemove.contains(member?.userID));
|
||||
}
|
||||
|
||||
void _notify() {
|
||||
try {
|
||||
notifyListeners();
|
||||
|
|
|
|||
|
|
@ -16,6 +16,8 @@ import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'
|
|||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_info.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'
|
||||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_full_info.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info.dart'
|
||||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_info.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_operation_result.dart'
|
||||
if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_operation_result.dart';
|
||||
import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.dart'
|
||||
|
|
@ -134,6 +136,34 @@ class TUIGroupProfileModel extends ChangeNotifier {
|
|||
return groupMemberListRes?.nextSeq;
|
||||
}
|
||||
|
||||
Future<void> processGroupMemberListEnter({required String groupID, required List<V2TimGroupMemberInfo> memberList}) async {
|
||||
final List<V2TimGroupMemberFullInfo> fullInfoList = memberList
|
||||
.where((member) => member.userID != null)
|
||||
.map((member) {
|
||||
return V2TimGroupMemberFullInfo(
|
||||
userID: member.userID!,
|
||||
nickName: member.nickName,
|
||||
nameCard: member.nameCard,
|
||||
friendRemark: member.friendRemark,
|
||||
faceUrl: member.faceUrl,
|
||||
onlineDevices: member.onlineDevices,
|
||||
);
|
||||
}).toList();
|
||||
|
||||
for (final fullInfo in fullInfoList) {
|
||||
final exists = _groupMemberList?.any((e) => e?.userID == fullInfo.userID) ?? false;
|
||||
if (!exists) {
|
||||
_groupMemberList = [...?_groupMemberList, fullInfo];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> processGroupMemberListLeave({required String groupID, required List<V2TimGroupMemberInfo> memberList}) async {
|
||||
final Set<String?> userIDsToRemove = memberList.map((member) => member.userID).toSet();
|
||||
|
||||
_groupMemberList?.removeWhere((member) => userIDsToRemove.contains(member?.userID));
|
||||
}
|
||||
|
||||
_loadConversation() async {
|
||||
conversation = await _conversationService.getConversation(conversationID: "group_$_groupID");
|
||||
}
|
||||
|
|
|
|||
|
|
@ -449,11 +449,11 @@ class _TUIChatState extends TIMUIKitState<TIMUIKitChat> {
|
|||
case UpdateType.groupInfo:
|
||||
model.loadGroupInfo(_getConvID());
|
||||
break;
|
||||
case UpdateType.memberList:
|
||||
if (widget.groupMemberList == null) {
|
||||
model.loadGroupMemberList(groupID: _getConvID());
|
||||
}
|
||||
model.loadGroupInfo(_getConvID());
|
||||
case UpdateType.memberEnter:
|
||||
model.processGroupMemberListEnter(groupID: _getConvID(), memberList: needUpdate.extraData);
|
||||
break;
|
||||
case UpdateType.memberLeave:
|
||||
model.processGroupMemberListLeave(groupID: _getConvID(), memberList: needUpdate.extraData);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
|
|
|||
|
|
@ -149,7 +149,8 @@ class _TIMUIKitGroupState extends TIMUIKitState<TIMUIKitGroup> {
|
|||
case UpdateType.groupInfo:
|
||||
Provider.of<TUIFriendShipViewModel>(context).loadGroupListData();
|
||||
break;
|
||||
case UpdateType.memberList:
|
||||
case UpdateType.memberEnter:
|
||||
case UpdateType.memberLeave:
|
||||
Provider.of<TUIFriendShipViewModel>(context).loadGroupListData();
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -166,8 +166,12 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState<TIMUIKitGroupProfile> {
|
|||
|
||||
model.loadGroupInfo(widget.groupID);
|
||||
break;
|
||||
case UpdateType.memberList:
|
||||
model.loadGroupMemberList(groupID: widget.groupID);
|
||||
case UpdateType.memberEnter:
|
||||
model.processGroupMemberListEnter(groupID: widget.groupID, memberList: needUpdate.extraData);
|
||||
model.loadGroupInfo(widget.groupID);
|
||||
break;
|
||||
case UpdateType.memberLeave:
|
||||
model.processGroupMemberListLeave(groupID: widget.groupID, memberList: needUpdate.extraData);
|
||||
model.loadGroupInfo(widget.groupID);
|
||||
break;
|
||||
default:
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
name: tencent_cloud_chat_uikit
|
||||
description: A powerful chat UI component library and business logic for Tencent Cloud Chat, creating seamless in-app chat modules for delightful user experiences.
|
||||
version: 5.0.1+3
|
||||
version: 5.0.1+4
|
||||
homepage: https://trtc.io/products/chat?utm_source=gfs&utm_medium=link&utm_campaign=%E6%B8%A0%E9%81%93&_channel_track_key=k6WgfCKn
|
||||
repository: https://github.com/TencentCloud/chat-uikit-flutter
|
||||
documentation: https://comm.qq.com/im/doc/flutter/en/TUIKit/readme.html
|
||||
|
|
|
|||
Loading…
Reference in New Issue