diff --git a/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart b/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart index f9a7a4d..159d342 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart @@ -13,6 +13,7 @@ import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/group_profile import 'package:tencent_cloud_chat_uikit/business_logic/listener_model/tui_group_listener_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_group_profile_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; +import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/group_profile_widget.dart'; @@ -20,6 +21,10 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/widgets/t import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_button_area.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_manage.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_notification.dart'; +import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_search_msg.dart'; +import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitSearch/tim_uikit_search.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; export 'package:tencent_cloud_chat_uikit/ui/widgets/transimit_group_owner_select.dart'; @@ -130,6 +135,24 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { GroupProfileWidgetEnum.buttonArea ]; + // 非群组成员的widget顺序,只显示查找聊天内容、置顶聊天、清空消息 + final List _nonMemberWidgetOrder = [ + GroupProfileWidgetEnum.searchMessage, + GroupProfileWidgetEnum.operationDivider, + GroupProfileWidgetEnum.pinedConversationBar, + GroupProfileWidgetEnum.operationDivider, + GroupProfileWidgetEnum.buttonArea + ]; + + // 判断当前用户是否为群组成员 + bool _isCurrentUserGroupMember(TUIGroupProfileModel model) { + final coreServices = serviceLocator(); + final currentUserID = coreServices.loginUserInfo?.userID; + if (currentUserID == null) return false; + + return model.groupMemberList.any((member) => member?.userID == currentUserID); + } + @override Widget tuiBuild(BuildContext context, TUIKitBuildValue buildValue) { final TUITheme theme = buildValue.theme; @@ -234,7 +257,24 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { case GroupProfileWidgetEnum.searchMessage: return (customBuilder?.searchMessage != null ? customBuilder?.searchMessage!() - : Text(TIM_t("你必须自定义search bar,并处理点击跳转")))!; + : GroupProfileGroupSearch( + onJumpToSearch: (V2TimConversation? conversation) { + if (conversation != null) { + Navigator.push( + context, + MaterialPageRoute( + builder: (context) => TIMUIKitSearch( + conversation: conversation, + onTapConversation: (V2TimConversation conv, V2TimMessage? message) { + // 处理点击会话的逻辑 + Navigator.pop(context); + }, + ), + ), + ); + } + }, + ))!; case GroupProfileWidgetEnum.operationDivider: return (customBuilder?.operationDivider != null ? customBuilder?.operationDivider!() @@ -313,9 +353,13 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { ), ); } else { + // 根据用户是否为群组成员选择不同的widget顺序 + final isCurrentUserMember = _isCurrentUserGroupMember(model); + final widgetOrder = isCurrentUserMember ? _defaultWidgetOrder : _nonMemberWidgetOrder; + return groupProfilePage( child: Column( - children: [..._renderWidgetsWithOrder(_defaultWidgetOrder)], + children: [..._renderWidgetsWithOrder(widgetOrder)], )); } }); diff --git a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_button_area.dart b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_button_area.dart index 38142d8..158f370 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_button_area.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_button_area.dart @@ -321,8 +321,57 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { } } + // 判断当前用户是否为群组成员 + bool _isCurrentUserGroupMember() { + final currentUserID = coreInstance.loginUserInfo?.userID; + if (currentUserID == null) return false; + + return model.groupMemberList.any((member) => member?.userID == currentUserID); + } + List _renderGroupOperation(BuildContext context, TUITheme theme, bool isOwner, String groupType) { final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isGroupMember = _isCurrentUserGroupMember(); + + // 如果用户不是群组成员,只显示:查找聊天内容、置顶聊天、清空消息 + if (!isGroupMember) { + // 对于非群组成员,只返回清空消息按钮,其他功能通过群组资料页面的其他组件提供 + return _operationList + .where((element) => ["clearHistory"].contains(element["id"])) + .map((e) => isDesktopScreen + ? OutlinedButton( + onPressed: () { + if (e["id"]! == "clearHistory") { + _clearHistory(context, theme); + } + }, + child: Text( + e["label"]!, + style: TextStyle(color: theme.cautionColor), + )) + : InkWell( + onTap: () { + if (e["id"]! == "clearHistory") { + _clearHistory(context, theme); + } + }, + child: Container( + alignment: Alignment.center, + padding: const EdgeInsets.symmetric(vertical: 15), + decoration: BoxDecoration( + color: Colors.white, + border: + Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), + child: Text( + e["label"]!, + style: TextStyle(color: theme.cautionColor, fontSize: 17), + ), + ), + )) + .toList(); + } + + // 原有的群组成员逻辑 return _operationList .where((element) { if (!isOwner) {