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/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/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/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/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/utils/screen_utils.dart';
|
||||||
import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/group_profile_widget.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_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_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_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';
|
import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart';
|
||||||
export 'package:tencent_cloud_chat_uikit/ui/widgets/transimit_group_owner_select.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
|
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
|
@override
|
||||||
Widget tuiBuild(BuildContext context, TUIKitBuildValue buildValue) {
|
Widget tuiBuild(BuildContext context, TUIKitBuildValue buildValue) {
|
||||||
final TUITheme theme = buildValue.theme;
|
final TUITheme theme = buildValue.theme;
|
||||||
|
|
@ -234,7 +257,24 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState<TIMUIKitGroupProfile> {
|
||||||
case GroupProfileWidgetEnum.searchMessage:
|
case GroupProfileWidgetEnum.searchMessage:
|
||||||
return (customBuilder?.searchMessage != null
|
return (customBuilder?.searchMessage != null
|
||||||
? customBuilder?.searchMessage!()
|
? 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:
|
case GroupProfileWidgetEnum.operationDivider:
|
||||||
return (customBuilder?.operationDivider != null
|
return (customBuilder?.operationDivider != null
|
||||||
? customBuilder?.operationDivider!()
|
? customBuilder?.operationDivider!()
|
||||||
|
|
@ -313,9 +353,13 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState<TIMUIKitGroupProfile> {
|
||||||
),
|
),
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
|
// 根据用户是否为群组成员选择不同的widget顺序
|
||||||
|
final isCurrentUserMember = _isCurrentUserGroupMember(model);
|
||||||
|
final widgetOrder = isCurrentUserMember ? _defaultWidgetOrder : _nonMemberWidgetOrder;
|
||||||
|
|
||||||
return groupProfilePage(
|
return groupProfilePage(
|
||||||
child: Column(
|
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) {
|
List<Widget> _renderGroupOperation(BuildContext context, TUITheme theme, bool isOwner, String groupType) {
|
||||||
final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop;
|
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
|
return _operationList
|
||||||
.where((element) {
|
.where((element) {
|
||||||
if (!isOwner) {
|
if (!isOwner) {
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue