feat(group): 调整群组信息页面对非群组成员的显示内容

This commit is contained in:
Zeew 2025-08-19 09:21:48 +08:00
parent c3aed3d14a
commit 5f677c5caa
2 changed files with 95 additions and 2 deletions

View File

@ -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<TIMUIKitGroupProfile> {
GroupProfileWidgetEnum.buttonArea
];
// widget顺序
final List<GroupProfileWidgetEnum> _nonMemberWidgetOrder = [
GroupProfileWidgetEnum.searchMessage,
GroupProfileWidgetEnum.operationDivider,
GroupProfileWidgetEnum.pinedConversationBar,
GroupProfileWidgetEnum.operationDivider,
GroupProfileWidgetEnum.buttonArea
];
//
bool _isCurrentUserGroupMember(TUIGroupProfileModel model) {
final coreServices = serviceLocator<CoreServicesImpl>();
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<TIMUIKitGroupProfile> {
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<TIMUIKitGroupProfile> {
),
);
} else {
// widget顺序
final isCurrentUserMember = _isCurrentUserGroupMember(model);
final widgetOrder = isCurrentUserMember ? _defaultWidgetOrder : _nonMemberWidgetOrder;
return groupProfilePage(
child: Column(
children: [..._renderWidgetsWithOrder(_defaultWidgetOrder)],
children: [..._renderWidgetsWithOrder(widgetOrder)],
));
}
});

View File

@ -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<Widget> _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) {