feat(group): 调整群组信息页面对非群组成员的显示内容
This commit is contained in:
parent
c3aed3d14a
commit
5f677c5caa
|
|
@ -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)],
|
||||
));
|
||||
}
|
||||
});
|
||||
|
|
|
|||
|
|
@ -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) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue