From 8ada938397fb791a2e3c535e7ab1b7d56aa6f7e5 Mon Sep 17 00:00:00 2001 From: vinsonswang Date: Fri, 23 May 2025 12:55:06 +0800 Subject: [PATCH] tencent_cloud_chat_uikit source code update to version 4.0.8 --- CHANGELOG.md | 7 + lib/base_widgets/tim_callback.dart | 2 - lib/base_widgets/tim_state.dart | 2 - lib/base_widgets/tim_stateless_widget.dart | 2 - .../life_cycle/base_life_cycle.dart | 18 +- .../life_cycle/chat_life_cycle.dart | 3 +- .../tui_group_listener_model.dart | 113 ++-- lib/business_logic/model/profile_model.dart | 6 +- .../separate_models/tui_chat_model_tools.dart | 65 +- .../tui_chat_separate_view_model.dart | 523 ++++++---------- .../tui_group_profile_model.dart | 71 ++- .../tui_profile_view_model.dart | 98 ++- .../view_models/tui_chat_global_model.dart | 163 +++-- .../tui_conversation_view_model.dart | 36 +- .../tui_friendship_view_model.dart | 65 +- .../view_models/tui_search_view_model.dart | 52 +- .../view_models/tui_self_info_view_model.dart | 3 +- .../conversation/conversation_services.dart | 18 +- .../conversation_services_implements.dart | 83 +-- lib/data_services/core/core_services.dart | 10 +- .../core/core_services_implements.dart | 114 ++-- .../friendShip/friendship_services.dart | 34 +- .../friendship_services_implements.dart | 185 +++--- lib/data_services/group/group_services.dart | 49 +- .../group/group_services_implement.dart | 207 +++---- .../message/message_service_implement.dart | 568 ++++++------------ .../message/message_services.dart | 83 ++- .../controller/tim_uikit_chat_controller.dart | 67 +-- .../tim_uikit_conversation_controller.dart | 23 +- .../tim_uikit_profile_controller.dart | 12 +- lib/ui/utils/message.dart | 136 ++--- .../tim_uikit_add_friend.dart | 35 +- .../tim_uikit_send_application.dart | 42 +- .../TIMUIKitAddGroup/tim_uikit_add_group.dart | 72 +-- .../tim_uikit_send_application.dart | 35 +- .../tim_uikit_black_list.dart | 34 +- ...history_message_list_tongue_container.dart | 22 +- .../tim_uikit_chat_history_message_list.dart | 61 +- ..._uikit_chat_history_message_list_item.dart | 551 +++++++++-------- .../tim_uikit_chat_message_tooltip.dart | 207 +++---- ..._uikit_history_message_list_container.dart | 73 +-- .../tim_uikit_message_read_receipt.dart | 25 +- .../TIMUIKItMessageList/utils.dart | 6 +- .../tim_uikit_message_reaction_detail.dart | 38 +- .../tim_uikit_message_reaction_show_item.dart | 66 +- ...tim_uikit_message_reaction_show_panel.dart | 46 +- .../tim_uikit_message_reaction_utils.dart | 30 +- .../tim_uikit_message_reaction_wrapper.dart | 49 +- .../tim_uikit_chat_custom_elem.dart | 14 +- .../tim_uikit_chat_face_elem.dart | 13 +- .../tim_uikit_chat_file_elem.dart | 100 ++- .../tim_uikit_chat_group_tips_elem.dart | 15 +- .../tim_uikit_chat_image_elem.dart | 207 ++----- .../tim_uikit_chat_reply_elem.dart | 3 +- .../tim_uikit_chat_sound_elem.dart | 25 +- .../tim_uikit_chat_text_elem.dart | 3 +- .../tim_uikit_chat_text_translate_elem.dart | 3 +- .../tim_uikit_chat_video_elem.dart | 108 ++-- .../tim_uikit_chat_videoplayer.dart | 33 +- .../tim_uikit_merger_message_elem.dart | 32 +- .../TIMUIKitTextField/at_member_panel.dart | 36 +- .../TIMUIKitTextField/tim_uikit_at_text.dart | 29 +- .../tim_uikit_call_invite_list.dart | 39 +- .../tim_uikit_more_panel.dart | 9 +- .../tim_uikit_text_field.dart | 121 +++- .../tim_uikit_text_field_controller.dart | 11 +- .../tim_uikit_text_field_layout/narrow.dart | 109 ++-- .../tim_uikit_text_field_layout/wide.dart | 91 +-- lib/ui/views/TIMUIKitChat/tim_uikit_chat.dart | 75 ++- .../TIMUIKitChat/tim_uikit_chat_config.dart | 26 +- .../TIMUIKitChat/tim_uikit_send_file.dart | 52 +- .../TIMUIKitContact/tim_uikit_contact.dart | 10 +- .../tim_uikit_conversation.dart | 44 +- .../tim_uikit_conversation_item.dart | 28 +- .../tim_uikit_conversation_last_msg.dart | 37 +- .../views/TIMUIKitGroup/tim_uikit_group.dart | 58 +- .../tim_uikit_group_application_list.dart | 30 +- ...tim_uikit_group_application_list_item.dart | 31 +- .../group_member/tui_add_group_member.dart | 3 +- .../group_member/tui_delete_group_member.dart | 14 +- .../group_member/tui_group_member_list.dart | 45 +- .../group_profile_widget.dart | 43 +- .../tim_uikit_group_profile.dart | 89 ++- .../widgets/tim_ui_group_profile_widget.dart | 6 +- .../widgets/tim_ui_group_search_msg.dart | 20 +- .../widgets/tim_uikit_group_button_area.dart | 96 +-- .../widgets/tim_uikit_group_detail_card.dart | 68 +-- .../widgets/tim_uikit_group_manage.dart | 83 ++- .../widgets/tim_uikit_group_member_title.dart | 11 +- .../tim_uikit_new_contact.dart | 60 +- .../views/TIMUIKitProfile/profile_widget.dart | 34 +- .../TIMUIKitProfile/tim_uikit_profile.dart | 165 ++--- .../tim_uikit_profile_userinfo_card.dart | 8 +- ...im_uikit_profile_userinfo_card_narrow.dart | 26 +- .../tim_uikit_profile_userinfo_card_wide.dart | 25 +- .../widget/tim_uikit_profile_widget.dart | 89 +-- .../TIMUIKitSearch/tim_uikit_search.dart | 81 +-- .../tim_uikit_search_friend.dart | 33 +- .../tim_uikit_search_group.dart | 33 +- .../TIMUIKitSearch/tim_uikit_search_msg.dart | 22 +- .../tim_uikit_search_msg_detail.dart | 61 +- lib/ui/widgets/avatar.dart | 44 +- lib/ui/widgets/contact_list.dart | 54 +- lib/ui/widgets/forward_message_screen.dart | 30 +- lib/ui/widgets/group_member_list.dart | 19 +- lib/ui/widgets/link_preview/common/utils.dart | 21 +- .../link_preview/link_preview_entry.dart | 18 +- lib/ui/widgets/merger_message_screen.dart | 71 +-- lib/ui/widgets/message_read_receipt.dart | 6 +- lib/ui/widgets/recent_conversation_list.dart | 63 +- .../widgets/transimit_group_owner_select.dart | 26 +- lib/ui/widgets/video_screen.dart | 6 +- pubspec.yaml | 4 +- 113 files changed, 3081 insertions(+), 3998 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 93e865c..0b01e34 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# 4.0.8 +* Use the OfflinePushInfo constructor, not the fromJson function. + +# 4.0.7 +* Fixed the issue that modifying your own adding friend permissions does not take effect. +* Fixed the setGroupInfo exception problem. + # 4.0.6 * Solve the updateSelfInfo exception problem. * The success of calling the initSDK interface is determined by the code of the return value. Avoid inaccurate judgment when calling the interface multiple times. diff --git a/lib/base_widgets/tim_callback.dart b/lib/base_widgets/tim_callback.dart index fb65b6f..9beb31e 100644 --- a/lib/base_widgets/tim_callback.dart +++ b/lib/base_widgets/tim_callback.dart @@ -1,5 +1,3 @@ -import 'package:flutter/cupertino.dart'; - enum TIMCallbackType { API_ERROR, FLUTTER_ERROR, INFO } class TIMCallback { diff --git a/lib/base_widgets/tim_state.dart b/lib/base_widgets/tim_state.dart index 99ba5d6..9a0e903 100644 --- a/lib/base_widgets/tim_state.dart +++ b/lib/base_widgets/tim_state.dart @@ -35,10 +35,8 @@ abstract class TIMState extends State { @override Widget build(BuildContext context) { - final onFlutterError = FlutterError.onError; FlutterError.onError = (FlutterErrorDetails details) { FlutterError.presentError(details); - // onFlutterError?.call(details); onTIMCallback(TIMCallback( type: TIMCallbackType.FLUTTER_ERROR, stackTrace: details.stack, diff --git a/lib/base_widgets/tim_stateless_widget.dart b/lib/base_widgets/tim_stateless_widget.dart index ce45e46..45b8fce 100644 --- a/lib/base_widgets/tim_stateless_widget.dart +++ b/lib/base_widgets/tim_stateless_widget.dart @@ -27,9 +27,7 @@ abstract class TIMStatelessWidget extends StatelessWidget { @override Widget build(BuildContext context) { - final onFlutterError = FlutterError.onError; FlutterError.onError = (FlutterErrorDetails details) { - // onFlutterError?.call(details); FlutterError.presentError(details); onTIMCallback(TIMCallback( type: TIMCallbackType.FLUTTER_ERROR, diff --git a/lib/business_logic/life_cycle/base_life_cycle.dart b/lib/business_logic/life_cycle/base_life_cycle.dart index 7f4d205..c790ed4 100644 --- a/lib/business_logic/life_cycle/base_life_cycle.dart +++ b/lib/business_logic/life_cycle/base_life_cycle.dart @@ -1,9 +1,13 @@ import 'package:flutter/cupertino.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; @@ -63,7 +67,8 @@ abstract class DefaultLifeCycle { static defaultNullCallbackSolution(dynamic) {} - static Future defaultAddFriend(String userID, String? remark, String? friendGroup, String? addWording, [BuildContext? context]) async { + static Future defaultAddFriend(String userID, String? remark, String? friendGroup, String? addWording, + [BuildContext? context]) async { return true; } @@ -77,7 +82,8 @@ abstract class DefaultLifeCycle { static Future defaultPopBackRemind() async { // You have to implement the exact life cycle hook in this case. - TIMUIKitClass.onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("请传入离开群组生命周期函数,提供返回首页或其他页面的导航方法。"), infoCode: 6661402)); + TIMUIKitClass.onTIMCallback(TIMCallback( + type: TIMCallbackType.INFO, infoRecommendText: TIM_t("请传入离开群组生命周期函数,提供返回首页或其他页面的导航方法。"), infoCode: 6661402)); return; } } diff --git a/lib/business_logic/life_cycle/chat_life_cycle.dart b/lib/business_logic/life_cycle/chat_life_cycle.dart index 89c4358..fb7e5f1 100644 --- a/lib/business_logic/life_cycle/chat_life_cycle.dart +++ b/lib/business_logic/life_cycle/chat_life_cycle.dart @@ -1,4 +1,5 @@ -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/base_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; diff --git a/lib/business_logic/listener_model/tui_group_listener_model.dart b/lib/business_logic/listener_model/tui_group_listener_model.dart index ac62ab1..e9cd8ca 100644 --- a/lib/business_logic/listener_model/tui_group_listener_model.dart +++ b/lib/business_logic/listener_model/tui_group_listener_model.dart @@ -7,12 +7,18 @@ import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimGroupListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_change_info_type.dart'; import 'package:tencent_cloud_chat_sdk/manager/v2_tim_manager.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_topic_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_change_info.dart'; +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_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_info_result.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_topic_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_topic_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/group/group_services.dart'; @@ -48,51 +54,42 @@ class TUIGroupListenerModel extends ChangeNotifier { } TUIGroupListenerModel() { - _groupListener = V2TimGroupListener( - onMemberInvited: (groupID, opUser, memberList) { - _needUpdate = NeedUpdate(groupID, UpdateType.memberList, ""); - notifyListeners(); - }, - onMemberKicked: (groupID, opUser, memberList) async { - if (_isLoginUserKickedFromGroup(groupID, memberList)) { - _deleteGroupConversation(groupID); - - final groupName = await _getGroupName(groupID); - _needUpdate = NeedUpdate(groupID, UpdateType.kickedFromGroup, groupName); - notifyListeners(); - } - }, - onMemberEnter: (String groupID, List memberList) { - _needUpdate = NeedUpdate(groupID, UpdateType.memberList, ""); - notifyListeners(); - }, - onMemberLeave: (String groupID, V2TimGroupMemberInfo member) { - _needUpdate = NeedUpdate(groupID, UpdateType.memberList, ""); - notifyListeners(); - }, - onGroupInfoChanged: (groupID, changeInfos) { - _needUpdate = NeedUpdate(groupID, UpdateType.groupInfo, ""); - for (V2TimGroupChangeInfo info in changeInfos) { - if (info.type == GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER) { - _needUpdate!.groupInfoSubType = GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER; - _needUpdate!.ownerID = info.value; - } - } - notifyListeners(); - }, - onReceiveJoinApplication: - (String groupID, V2TimGroupMemberInfo member, String opReason) async { - _onReceiveJoinApplication(groupID, member, opReason); - chatViewModel.refreshGroupApplicationList(); - notifyListeners(); - }, - onGroupDismissed: (String groupID, V2TimGroupMemberInfo opUser) async { + _groupListener = V2TimGroupListener(onMemberInvited: (groupID, opUser, memberList) { + _needUpdate = NeedUpdate(groupID, UpdateType.memberList, ""); + notifyListeners(); + }, onMemberKicked: (groupID, opUser, memberList) async { + if (_isLoginUserKickedFromGroup(groupID, memberList)) { _deleteGroupConversation(groupID); + final groupName = await _getGroupName(groupID); - _needUpdate = NeedUpdate(groupID, UpdateType.groupDismissed, groupName); + _needUpdate = NeedUpdate(groupID, UpdateType.kickedFromGroup, groupName); notifyListeners(); } - ); + }, onMemberEnter: (String groupID, List memberList) { + _needUpdate = NeedUpdate(groupID, UpdateType.memberList, ""); + notifyListeners(); + }, onMemberLeave: (String groupID, V2TimGroupMemberInfo member) { + _needUpdate = NeedUpdate(groupID, UpdateType.memberList, ""); + notifyListeners(); + }, onGroupInfoChanged: (groupID, changeInfos) { + _needUpdate = NeedUpdate(groupID, UpdateType.groupInfo, ""); + for (V2TimGroupChangeInfo info in changeInfos) { + if (info.type == GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER) { + _needUpdate!.groupInfoSubType = GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER; + _needUpdate!.ownerID = info.value; + } + } + notifyListeners(); + }, onReceiveJoinApplication: (String groupID, V2TimGroupMemberInfo member, String opReason) async { + _onReceiveJoinApplication(groupID, member, opReason); + chatViewModel.refreshGroupApplicationList(); + notifyListeners(); + }, onGroupDismissed: (String groupID, V2TimGroupMemberInfo opUser) async { + _deleteGroupConversation(groupID); + final groupName = await _getGroupName(groupID); + _needUpdate = NeedUpdate(groupID, UpdateType.groupDismissed, groupName); + notifyListeners(); + }); } setGroupListener() { @@ -104,8 +101,7 @@ class TUIGroupListenerModel extends ChangeNotifier { } getCommunityCategoryList(String groupID) async { - final Map? customInfo = - await getCommunityCustomInfo(groupID); + final Map? customInfo = await getCommunityCustomInfo(groupID); if (customInfo != null) { final String? categoryListString = customInfo["categoryList"]; if (categoryListString != null && categoryListString.isNotEmpty) { @@ -116,9 +112,7 @@ class TUIGroupListenerModel extends ChangeNotifier { Future?> getCommunityCustomInfo(String groupID) async { V2TimValueCallback> res = - await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .getGroupsInfo(groupIDList: [groupID]); + await TencentImSDKPlugin.v2TIMManager.getGroupManager().getGroupsInfo(groupIDList: [groupID]); if (res.code != 0) { final V2TimGroupInfoResult? groupInfo = res.data?[0]; if (groupInfo != null) { @@ -129,10 +123,8 @@ class TUIGroupListenerModel extends ChangeNotifier { return null; } - setCommunityCategoryList( - String groupID, String groupType, List newCategoryList) async { - final Map? customInfo = - await getCommunityCustomInfo(groupID); + setCommunityCategoryList(String groupID, String groupType, List newCategoryList) async { + final Map? customInfo = await getCommunityCustomInfo(groupID); customInfo?["categoryList"] = jsonEncode(newCategoryList); TencentImSDKPlugin.v2TIMManager.getGroupManager().setGroupInfo( info: V2TimGroupInfo( @@ -149,10 +141,8 @@ class TUIGroupListenerModel extends ChangeNotifier { ); } - _onReceiveJoinApplication( - String groupID, V2TimGroupMemberInfo member, String opReason) { - Future.delayed(const Duration(milliseconds: 500), - () => chatViewModel.refreshGroupApplicationList()); + _onReceiveJoinApplication(String groupID, V2TimGroupMemberInfo member, String opReason) { + Future.delayed(const Duration(milliseconds: 500), () => chatViewModel.refreshGroupApplicationList()); } Future _getGroupName(String groupID) async { @@ -177,6 +167,3 @@ class TUIGroupListenerModel extends ChangeNotifier { return false; } } - - - diff --git a/lib/business_logic/model/profile_model.dart b/lib/business_logic/model/profile_model.dart index f1141c9..eba3771 100644 --- a/lib/business_logic/model/profile_model.dart +++ b/lib/business_logic/model/profile_model.dart @@ -1,5 +1,7 @@ -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; class UserProfile { diff --git a/lib/business_logic/separate_models/tui_chat_model_tools.dart b/lib/business_logic/separate_models/tui_chat_model_tools.dart index e84f627..8ddaf38 100644 --- a/lib/business_logic/separate_models/tui_chat_model_tools.dart +++ b/lib/business_logic/separate_models/tui_chat_model_tools.dart @@ -4,7 +4,8 @@ import 'dart:io'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/tim_uikit_cloud_custom_data.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart'; @@ -14,15 +15,13 @@ class TUIChatModelTools { final TUIChatGlobalModel globalModel = serviceLocator(); final CoreServicesImpl _coreServices = serviceLocator(); - OfflinePushInfo buildMessagePushInfo( - V2TimMessage message, String convID, ConvType convType) { + OfflinePushInfo buildMessagePushInfo(V2TimMessage message, String convID, ConvType convType) { String createJSON(String convID) { return "{\"conversationID\": \"$convID\"}"; } if (globalModel.chatConfig.offlinePushInfo != null) { - final customData = - globalModel.chatConfig.offlinePushInfo!(message, convID, convType); + final customData = globalModel.chatConfig.offlinePushInfo!(message, convID, convType); if (customData != null) { return customData; } @@ -33,12 +32,8 @@ class TUIChatModelTools { // If user provides null, use default ext. String ext = globalModel.chatConfig.notificationExt != null ? globalModel.chatConfig.notificationExt!(message, convID, convType) ?? - (convType == ConvType.c2c - ? createJSON("c2c_${message.sender}") - : createJSON("group_$convID")) - : (convType == ConvType.c2c - ? createJSON("c2c_${message.sender}") - : createJSON("group_$convID")); + (convType == ConvType.c2c ? createJSON("c2c_${message.sender}") : createJSON("group_$convID")) + : (convType == ConvType.c2c ? createJSON("c2c_${message.sender}") : createJSON("group_$convID")); String desc = message.userID ?? message.groupID ?? ""; String messageSummary = ""; @@ -76,23 +71,22 @@ class TUIChatModelTools { } if (globalModel.chatConfig.notificationBody != null) { - desc = - globalModel.chatConfig.notificationBody!(message, convID, convType) ?? - messageSummary; + desc = globalModel.chatConfig.notificationBody!(message, convID, convType) ?? messageSummary; } else { desc = messageSummary; } - return OfflinePushInfo.fromJson({ - "title": title, - "desc": desc, - "disablePush": false, - "ext": ext, - "iOSSound": globalModel.chatConfig.notificationIOSSound, - "androidSound": globalModel.chatConfig.notificationAndroidSound, - "ignoreIOSBadge": false, - "androidOPPOChannelID": globalModel.chatConfig.notificationOPPOChannelID, - }); + return OfflinePushInfo( + title: title, + desc: desc, + disablePush: false, + ext: ext, + iOSSound: globalModel.chatConfig.notificationIOSSound, + androidSound: globalModel.chatConfig.notificationAndroidSound, + ignoreIOSBadge: false, + androidOPPOChannelID: globalModel.chatConfig.notificationOPPOChannelID, + androidVIVOClassification: 1, + ); } V2TimMessage setUserInfoForMessage(V2TimMessage messageInfo, String? id) { @@ -102,18 +96,15 @@ class TUIChatModelTools { messageInfo.nickName = loginUserInfo.nickName; messageInfo.sender = loginUserInfo.userID; } - messageInfo.timestamp = - (DateTime.now().millisecondsSinceEpoch / 1000).ceil(); + messageInfo.timestamp = (DateTime.now().millisecondsSinceEpoch / 1000).ceil(); messageInfo.isSelf = true; messageInfo.id = id; return messageInfo; } - String getMessageSummary(V2TimMessage message, - String? Function(V2TimMessage message)? abstractMessageBuilder) { - final String? customAbstractMessage = - abstractMessageBuilder != null ? abstractMessageBuilder(message) : null; + String getMessageSummary(V2TimMessage message, String? Function(V2TimMessage message)? abstractMessageBuilder) { + final String? customAbstractMessage = abstractMessageBuilder != null ? abstractMessageBuilder(message) : null; if (customAbstractMessage != null) { return customAbstractMessage; } @@ -147,8 +138,7 @@ class TUIChatModelTools { } } - String getMessageAbstract(V2TimMessage message, - String? Function(V2TimMessage message)? abstractMessageBuilder) { + String getMessageAbstract(V2TimMessage message, String? Function(V2TimMessage message)? abstractMessageBuilder) { final messageAbstract = RepliedMessageAbstract( summary: TIM_t(getMessageSummary(message, abstractMessageBuilder)), elemType: message.elemType, @@ -159,18 +149,13 @@ class TUIChatModelTools { } Future getExistingMessageByID( - {required String msgID, - required String conversationID, - required ConvType conversationType}) async { - final currentHistoryMsgList = - globalModel.messageListMap[conversationID] ?? []; + {required String msgID, required String conversationID, required ConvType conversationType}) async { + final currentHistoryMsgList = globalModel.messageListMap[conversationID] ?? []; final int? targetIndex = currentHistoryMsgList.indexWhere((item) { return item.msgID == msgID; }); - if (targetIndex != null && - targetIndex > -1 && - currentHistoryMsgList.isNotEmpty) { + if (targetIndex != null && targetIndex > -1 && currentHistoryMsgList.isNotEmpty) { return currentHistoryMsgList[targetIndex]; } else { return null; diff --git a/lib/business_logic/separate_models/tui_chat_separate_view_model.dart b/lib/business_logic/separate_models/tui_chat_separate_view_model.dart index 177c810..511c3b7 100644 --- a/lib/business_logic/separate_models/tui_chat_separate_view_model.dart +++ b/lib/business_logic/separate_models/tui_chat_separate_view_model.dart @@ -14,18 +14,30 @@ import 'package:tencent_cloud_chat_sdk/enum/history_msg_get_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_custom_elem.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_message_read_member_list.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_custom_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_custom_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info_result.dart'; +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_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' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_change_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_receipt.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_msg_create_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/chat_life_cycle.dart'; @@ -46,8 +58,7 @@ import 'package:uuid/uuid.dart'; enum LoadDirection { previous, latest } class TUIChatSeparateViewModel extends ChangeNotifier { - final FriendshipServices _friendshipServices = - serviceLocator(); + final FriendshipServices _friendshipServices = serviceLocator(); final MessageService _messageService = serviceLocator(); final GroupServices _groupServices = serviceLocator(); final TUIChatGlobalModel globalModel = serviceLocator(); @@ -220,17 +231,13 @@ class TUIChatSeparateViewModel extends ChangeNotifier { globalModel.loadingMessage[conversationID]!.isNotEmpty) { globalModel.loadingMessage[conversationID]!.add(messageInfo); } else { - globalModel.loadingMessage[conversationID] = [ - messageInfo - ]; + globalModel.loadingMessage[conversationID] = [messageInfo]; } } } void getUserShowName(List userIDs) async { - final List filteredList = userIDs - .where((element) => !_groupUserShowName.containsKey(element)) - .toList(); + final List filteredList = userIDs.where((element) => !_groupUserShowName.containsKey(element)).toList(); for (final element in filteredList) { _groupUserShowName[element] = element; } @@ -258,10 +265,8 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } } - void initForEachConversation(ConvType convType, String convID, - ValueChanged? onChangeInputField, - {String? groupID, - List? preGroupMemberList}) async { + void initForEachConversation(ConvType convType, String convID, ValueChanged? onChangeInputField, + {String? groupID, List? preGroupMemberList}) async { if (_isInit) { return; } @@ -275,11 +280,9 @@ class TUIChatSeparateViewModel extends ChangeNotifier { groupMemberList = null; selfMemberInfo = null; - globalModel.setCurrentConversation( - CurrentConversation(conversationID, conversationType ?? ConvType.c2c)); + globalModel.setCurrentConversation(CurrentConversation(conversationID, conversationType ?? ConvType.c2c)); globalModel.lifeCycle = lifeCycle; - globalModel.setMessageListPosition( - conversationID, HistoryMessagePosition.bottom); + globalModel.setMessageListPosition(conversationID, HistoryMessagePosition.bottom); globalModel.setChatConfig(chatConfig); globalModel.clearReceivedNewMessageCount(); @@ -291,8 +294,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { loadGroupInfo(groupID ?? convID); if (preGroupMemberList != null) { groupMemberList = preGroupMemberList; - selfMemberInfo = preGroupMemberList.firstWhereOrNull( - (e) => e?.userID == selfModel.loginInfo?.userID); + selfMemberInfo = preGroupMemberList.firstWhereOrNull((e) => e?.userID == selfModel.loginInfo?.userID); } else { await loadSelfMemberInfo(groupID: groupID ?? convID); loadGroupMemberList(groupID: groupID ?? convID); @@ -303,8 +305,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { }); } else { Future.delayed(const Duration(milliseconds: 10), () async { - final List? friendRes = - await _friendshipServices.getFriendsInfo(userIDList: [convID]); + final List? friendRes = await _friendshipServices.getFriendsInfo(userIDList: [convID]); if (friendRes != null && friendRes.isNotEmpty) { final V2TimFriendInfoResult friendInfoResult = friendRes[0]; currentChatUserInfo = V2TimGroupMemberFullInfo( @@ -313,8 +314,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { nickName: friendInfoResult.friendInfo?.userProfile?.nickName, friendRemark: friendInfoResult.friendInfo?.friendRemark); } else { - final List? userRes = - await _friendshipServices.getUsersInfo(userIDList: [convID]); + final List? userRes = await _friendshipServices.getUsersInfo(userIDList: [convID]); if (userRes != null && userRes.isNotEmpty) { final V2TimUserFullInfo userFullInfo = userRes[0]; currentChatUserInfo = V2TimGroupMemberFullInfo( @@ -340,31 +340,23 @@ class TUIChatSeparateViewModel extends ChangeNotifier { List msgList = []; bool tempHaveMoreData = false; - final previousResponse = - await _messageService.getHistoryMessageListWithComplete( - count: 20, - getType: HistoryMsgGetTypeEnum.V2TIM_GET_CLOUD_OLDER_MSG, - userID: conversationType == ConvType.c2c ? conversationID : null, - groupID: conversationType == ConvType.group ? conversationID : null, - lastMsgSeq: max(seq, 0)); + final previousResponse = await _messageService.getHistoryMessageListWithComplete( + count: 20, + getType: HistoryMsgGetTypeEnum.V2TIM_GET_CLOUD_OLDER_MSG, + userID: conversationType == ConvType.c2c ? conversationID : null, + groupID: conversationType == ConvType.group ? conversationID : null, + lastMsgSeq: max(seq, 0)); msgList = previousResponse?.messageList ?? []; tempHaveMoreData = !(previousResponse?.isFinished ?? false); haveMoreLatestData = true; - globalModel.setMessageListPosition( - conversationID, HistoryMessagePosition.notShowLatest); + globalModel.setMessageListPosition(conversationID, HistoryMessagePosition.notShowLatest); msgList = await lifeCycle?.didGetHistoricalMessageList(msgList) ?? msgList; msgList.insert( msgList.length - 1, V2TimMessage( - userID: '', - isSelf: false, - elemType: 101, - msgID: msgList[0].msgID, - seq: msgList[0].seq, - timestamp: 9999)); - globalModel.setMessageList(conversationID, msgList, - needResetNewMessageCount: false); + userID: '', isSelf: false, elemType: 101, msgID: msgList[0].msgID, seq: msgList[0].seq, timestamp: 9999)); + globalModel.setMessageList(conversationID, msgList, needResetNewMessageCount: false); if (chatConfig.isShowReadingStatus) { _getMsgReadReceipt(msgList); @@ -385,10 +377,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { try { bool tempHaveMoreData = false; // 根据加载方向设置是否还能继续加载更多消息 - direction == LoadDirection.latest - ? haveMoreLatestData = false - : tempHaveMoreData = false; - + direction == LoadDirection.latest ? haveMoreLatestData = false : tempHaveMoreData = false; // 获取当前聊天对话的历史消息列表 final currentRecordList = globalModel.messageListMap[conversationID]; @@ -426,8 +415,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { // 根据加载方向拼接消息列表 if (direction == LoadDirection.latest) { - globalModel.receivedNewMessageCount = - globalModel.receivedNewMessageCount + messageList.length; + globalModel.receivedNewMessageCount = globalModel.receivedNewMessageCount + messageList.length; messageList = messageList.reversed.toList(); newList = _combineMessageList(messageList, currentRecordList); } else { @@ -435,8 +423,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } // 处理新获取的消息列表后回调 - final List msgList = - await lifeCycle?.didGetHistoricalMessageList(newList) ?? newList; + final List msgList = await lifeCycle?.didGetHistoricalMessageList(newList) ?? newList; // 更新聊天记录到全局model globalModel.setMessageList( @@ -446,9 +433,8 @@ class TUIChatSeparateViewModel extends ChangeNotifier { ); } else { // 处理新获取的消息列表后回调 - List receivedList = await lifeCycle - ?.didGetHistoricalMessageList(response.messageList) ?? - response.messageList; + List receivedList = + await lifeCycle?.didGetHistoricalMessageList(response.messageList) ?? response.messageList; globalModel.loadingMessage.remove(conversationID); // 更新聊天记录到全局model @@ -466,8 +452,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { // 根据加载方向更新是否还能继续加载更多消息 if (direction == LoadDirection.latest && !haveMoreLatestData) { - globalModel.setMessageListPosition( - conversationID, HistoryMessagePosition.inTwoScreen); + globalModel.setMessageListPosition(conversationID, HistoryMessagePosition.inTwoScreen); } _notify(); @@ -481,8 +466,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } // 拼接聊天记录 - List _combineMessageList( - List first, List second) { + List _combineMessageList(List first, List second) { return [...first, ...second]; } @@ -492,14 +476,16 @@ class TUIChatSeparateViewModel extends ChangeNotifier { ); } - Future>> getMessageReadReceipts( - List messageIDList) { + Future>> getMessageReadReceipts(List messageIDList) { return _messageService.getMessageReadReceipts(messageIDList: messageIDList); } _getMsgReadReceipt(List message) async { final msgID = message - .where((e) => (e.isSelf ?? true) && (e.needReadReceipt ?? false) && (e.status == MessageStatus.V2TIM_MSG_STATUS_SEND_SUCC)) + .where((e) => + (e.isSelf ?? true) && + (e.needReadReceipt ?? false) && + (e.status == MessageStatus.V2TIM_MSG_STATUS_SEND_SUCC)) .map((e) => e.msgID ?? '') .toList(); if (msgID.isNotEmpty) { @@ -520,16 +506,15 @@ class TUIChatSeparateViewModel extends ChangeNotifier { final String originText = message.textElem?.text ?? ""; final String deviceLocale = TIM_getCurrentDeviceLocale(); final String targetMessage = deviceLocale.split("-")[0]; - final translatedText = - await _messageService.translateText(originText, targetMessage); + final translatedText = await _messageService.translateText(originText, targetMessage); - final LocalCustomDataModel localCustomData = LocalCustomDataModel.fromMap( - json.decode(TencentUtils.checkString(message.localCustomData) ?? "{}")); + final LocalCustomDataModel localCustomData = + LocalCustomDataModel.fromMap(json.decode(TencentUtils.checkString(message.localCustomData) ?? "{}")); localCustomData.translatedText = translatedText; message.localCustomData = json.encode(localCustomData.toMap()); globalModel.onMessageModified(message); - TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager.setLocalCustomData( - msgID: message.msgID!, localCustomData: message.localCustomData ?? ""); + TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager + .setLocalCustomData(msgID: message.msgID!, localCustomData: message.localCustomData ?? ""); } addToMessageReadReceiptList(V2TimMessage message) { @@ -561,8 +546,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } sendMessageReadReceipts(List messageIDList) async { - final res = await _messageService.sendMessageReadReceipts( - messageIDList: messageIDList); + final res = await _messageService.sendMessageReadReceipts(messageIDList: messageIDList); return res; } @@ -571,8 +555,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { return _messageService.markC2CMessageAsRead(userID: conversationID); } - final res = - await _messageService.markGroupMessageAsRead(groupID: conversationID); + final res = await _messageService.markGroupMessageAsRead(groupID: conversationID); if (res.code == 10015) { isGroupExist = false; } @@ -580,45 +563,37 @@ class TUIChatSeparateViewModel extends ChangeNotifier { Future loadSelfMemberInfo({required String groupID}) async { V2TimValueCallback> getGroupMembersInfoRes = - await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .getGroupMembersInfo( + await TencentImSDKPlugin.v2TIMManager.getGroupManager().getGroupMembersInfo( groupID: groupID, memberList: [selfModel.loginInfo?.userID ?? ""], ); if (getGroupMembersInfoRes.code == 0) { final userList = getGroupMembersInfoRes.data; - selfMemberInfo = userList - ?.firstWhereOrNull((e) => e.userID == selfModel.loginInfo?.userID); + selfMemberInfo = userList?.firstWhereOrNull((e) => e.userID == selfModel.loginInfo?.userID); _notify(); } return; } - Future loadGroupMemberList( - {required String groupID, int count = 100, String? seq}) async { - final String? nextSeq = await _loadGroupMemberListFunction( - groupID: groupID, seq: seq, count: count); + Future loadGroupMemberList({required String groupID, int count = 100, String? seq}) async { + final String? nextSeq = await _loadGroupMemberListFunction(groupID: groupID, seq: seq, count: count); if (nextSeq != null && nextSeq != "0" && nextSeq != "") { - return await loadGroupMemberList( - groupID: groupID, count: count, seq: nextSeq); + return await loadGroupMemberList(groupID: groupID, count: count, seq: nextSeq); } else { - selfMemberInfo = groupMemberList - ?.firstWhereOrNull((e) => e?.userID == selfModel.loginInfo?.userID); + selfMemberInfo = groupMemberList?.firstWhereOrNull((e) => e?.userID == selfModel.loginInfo?.userID); _notify(); } } - - void _notify(){ - try{ + + void _notify() { + try { notifyListeners(); - }catch(e){ - debugPrint(e.toString()); + } catch (e) { + debugPrint(e.toString()); } } - Future _loadGroupMemberListFunction( - {required String groupID, int count = 100, String? seq}) async { + Future _loadGroupMemberListFunction({required String groupID, int count = 100, String? seq}) async { if (seq == null || seq == "" || seq == "0") { groupMemberList?.clear(); } @@ -644,10 +619,8 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } } - Future<(V2TimGroupInfo?, GroupReceiptAllowType?)> loadGroupInfo( - String groupID) async { - final groupInfoList = - await _groupServices.getGroupsInfo(groupIDList: [groupID]); + Future<(V2TimGroupInfo?, GroupReceiptAllowType?)> loadGroupInfo(String groupID) async { + final groupInfoList = await _groupServices.getGroupsInfo(groupIDList: [groupID]); if (groupInfoList != null && groupInfoList.isNotEmpty) { final groupRes = groupInfoList.first; if (groupRes.resultCode == 0) { @@ -667,13 +640,10 @@ class TUIChatSeparateViewModel extends ChangeNotifier { return (null, null); } - Future updateMessageFromController( - {required String msgID, V2TimMessage? message}) async { + Future updateMessageFromController({required String msgID, V2TimMessage? message}) async { V2TimMessage? newMessage = message ?? await tools.getExistingMessageByID( - msgID: msgID, - conversationType: conversationType ?? ConvType.c2c, - conversationID: conversationID); + msgID: msgID, conversationType: conversationType ?? ConvType.c2c, conversationID: conversationID); if (newMessage != null) { globalModel.onMessageModified(newMessage, conversationID); } else { @@ -683,8 +653,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } } - Future?> modifyMessage( - {required V2TimMessage message}) async { + Future?> modifyMessage({required V2TimMessage message}) async { return _messageService.modifyMessage(message: message); } @@ -734,10 +703,8 @@ class TUIChatSeparateViewModel extends ChangeNotifier { ); removeSendingMessageID(id); if (isEditStatusMessage == false && - globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - globalModel.updateMessage( - sendMsgRes, convID, id, convType, groupType, setInputField); + globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + globalModel.updateMessage(sendMsgRes, convID, id, convType, groupType, setInputField); } if (lifeCycle?.messageDidSend != null) { lifeCycle!.messageDidSend(sendMsgRes); @@ -762,21 +729,15 @@ class TUIChatSeparateViewModel extends ChangeNotifier { if (text.isEmpty) { return null; } - final textATMessageInfo = await _messageService.createTextAtMessage( - text: text, atUserList: atUserList); + final textATMessageInfo = await _messageService.createTextAtMessage(text: text, atUserList: atUserList); List currentHistoryMsgList = getOriginMessageList(); final messageInfo = textATMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, textATMessageInfo.id!); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, textATMessageInfo.id!); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -785,31 +746,22 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, id: textATMessageInfo.id as String, convType: ConvType.group, - offlinePushInfo: tools.buildMessagePushInfo( - textATMessageInfo.messageInfo!, convID, convType)); + offlinePushInfo: tools.buildMessagePushInfo(textATMessageInfo.messageInfo!, convID, convType)); } return null; } Future?> sendCustomMessage( - {required String data, - required String convID, - required ConvType convType}) async { - final customMessageInfo = - await _messageService.createCustomMessage(data: data); + {required String data, required String convID, required ConvType convType}) async { + final customMessageInfo = await _messageService.createCustomMessage(data: data); List currentHistoryMsgList = getOriginMessageList(); final messageInfo = customMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, customMessageInfo.id!); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, customMessageInfo.id!); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -818,32 +770,22 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, id: customMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - customMessageInfo.messageInfo!, convID, convType)); + offlinePushInfo: tools.buildMessagePushInfo(customMessageInfo.messageInfo!, convID, convType)); } return null; } Future?> sendFaceMessage( - {required int index, - required String data, - required String convID, - required ConvType convType}) async { - final faceMessageInfo = - await _messageService.createFaceMessage(index: index, data: data); + {required int index, required String data, required String convID, required ConvType convType}) async { + final faceMessageInfo = await _messageService.createFaceMessage(index: index, data: data); List currentHistoryMsgList = getOriginMessageList(); final messageInfo = faceMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, faceMessageInfo.id!); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, faceMessageInfo.id!); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -853,8 +795,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { id: faceMessageInfo.id as String, convType: convType, messageInfo: messageInfoWithSender, - offlinePushInfo: tools.buildMessagePushInfo( - faceMessageInfo.messageInfo!, convID, convType)); + offlinePushInfo: tools.buildMessagePushInfo(faceMessageInfo.messageInfo!, convID, convType)); } return null; } @@ -865,21 +806,15 @@ class TUIChatSeparateViewModel extends ChangeNotifier { required String convID, required ConvType convType, }) async { - final soundMessageInfo = await _messageService.createSoundMessage( - soundPath: soundPath, duration: duration); + final soundMessageInfo = await _messageService.createSoundMessage(soundPath: soundPath, duration: duration); List currentHistoryMsgList = getOriginMessageList(); final messageInfo = soundMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, soundMessageInfo.id!); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, soundMessageInfo.id!); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -888,8 +823,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, id: soundMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - soundMessageInfo.messageInfo!, convID, convType), + offlinePushInfo: tools.buildMessagePushInfo(soundMessageInfo.messageInfo!, convID, convType), ); } return null; @@ -905,56 +839,44 @@ class TUIChatSeparateViewModel extends ChangeNotifier { return null; } if (_repliedMessage != null) { - V2TimMsgCreateInfoResult? textMessageInfo = - await _messageService.createTextMessage(text: text); + V2TimMsgCreateInfoResult? textMessageInfo = await _messageService.createTextMessage(text: text); if (atUserIDList != null && atUserIDList.isNotEmpty) { - textMessageInfo = await _messageService.createTextAtMessage( - text: text, atUserList: atUserIDList); + textMessageInfo = await _messageService.createTextAtMessage(text: text, atUserList: atUserIDList); } final V2TimMessage? messageInfo = textMessageInfo!.messageInfo; final receiver = convType == ConvType.c2c ? convID : ''; final groupID = convType == ConvType.group ? convID : ''; if (messageInfo != null) { - V2TimMessage messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, textMessageInfo.id!); + V2TimMessage messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, textMessageInfo.id!); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - final hasNickName = _repliedMessage?.nickName != null && - _repliedMessage?.nickName != ""; + final hasNickName = _repliedMessage?.nickName != null && _repliedMessage?.nickName != ""; final cloudCustomData = { "messageReply": { "messageID": _repliedMessage!.msgID, - "messageAbstract": tools.getMessageAbstract( - _repliedMessage!, abstractMessageBuilder), - "messageSender": hasNickName - ? _repliedMessage!.nickName - : _repliedMessage?.sender, + "messageAbstract": tools.getMessageAbstract(_repliedMessage!, abstractMessageBuilder), + "messageSender": hasNickName ? _repliedMessage!.nickName : _repliedMessage?.sender, "messageType": _repliedMessage?.elemType, "version": 1 } }; messageInfoWithSender.cloudCustomData = json.encode(cloudCustomData); List currentHistoryMsgList = getOriginMessageList(); - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _repliedMessage = null; final sendMsgRes = await _messageService.sendMessage( cloudCustomData: - TencentUtils.checkString(messageInfoWithSender?.cloudCustomData) ?? - json.encode(cloudCustomData), + TencentUtils.checkString(messageInfoWithSender?.cloudCustomData) ?? json.encode(cloudCustomData), id: textMessageInfo.id as String, - offlinePushInfo: tools.buildMessagePushInfo( - messageInfoWithSender, convID, convType), + offlinePushInfo: tools.buildMessagePushInfo(messageInfoWithSender, convID, convType), needReadReceipt: chatConfig.isShowReadingStatus, groupID: groupID, receiver: receiver); _notify(); - globalModel.updateMessage(sendMsgRes, convID, - messageInfoWithSender.id ?? "", convType, groupType, setInputField); + globalModel.updateMessage( + sendMsgRes, convID, messageInfoWithSender.id ?? "", convType, groupType, setInputField); if (lifeCycle?.messageDidSend != null) { lifeCycle!.messageDidSend(sendMsgRes); } @@ -985,18 +907,13 @@ class TUIChatSeparateViewModel extends ChangeNotifier { dynamic inputElement, required ConvType convType}) async { String? image; - if ((PlatformUtils().isAndroid || PlatformUtils().isIOS) && - imagePath != null && - imagePath.isNotEmpty) { + if ((PlatformUtils().isAndroid || PlatformUtils().isIOS) && imagePath != null && imagePath.isNotEmpty) { try { final size = getFileSize(File(imagePath)); - final format = - imagePath.split(".")[imagePath.split(".").length - 1].toLowerCase(); - if (size > 20 || - (format != "jpg" && format != "png" && format != "gif")) { + final format = imagePath.split(".")[imagePath.split(".").length - 1].toLowerCase(); + if (size > 20 || (format != "jpg" && format != "png" && format != "gif")) { final target = await getTempPath(); - final result = await FlutterImageCompress.compressAndGetFile( - imagePath, target, + final result = await FlutterImageCompress.compressAndGetFile(imagePath, target, format: CompressFormat.jpeg, quality: 85); image = result?.path; } @@ -1004,22 +921,15 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } catch (e) {} } final imageMessageInfo = await _messageService.createImageMessage( - imageName: imageName, - imagePath: image ?? imagePath, - inputElement: inputElement); + imageName: imageName, imagePath: image ?? imagePath, inputElement: inputElement); List currentHistoryMsgList = getOriginMessageList(); final messageInfo = imageMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, imageMessageInfo.id); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, imageMessageInfo.id); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1029,8 +939,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { messageInfo: messageInfoWithSender, id: imageMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - imageMessageInfo.messageInfo!, convID, convType), + offlinePushInfo: tools.buildMessagePushInfo(imageMessageInfo.messageInfo!, convID, convType), ); } return null; @@ -1046,24 +955,17 @@ class TUIChatSeparateViewModel extends ChangeNotifier { List currentHistoryMsgList = getOriginMessageList(); final videoMessageInfo = await _messageService.createVideoMessage( videoPath: videoPath, - type: videoPath != null - ? videoPath.split(".")[videoPath.split(".").length - 1] - : 'mp4', + type: videoPath != null ? videoPath.split(".")[videoPath.split(".").length - 1] : 'mp4', duration: duration, inputElement: inputElement, snapshotPath: snapshotPath); final messageInfo = videoMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, videoMessageInfo.id); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, videoMessageInfo.id); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1073,8 +975,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { messageInfo: messageInfoWithSender, id: videoMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - videoMessageInfo.messageInfo!, convID, convType), + offlinePushInfo: tools.buildMessagePushInfo(videoMessageInfo.messageInfo!, convID, convType), ); } return null; @@ -1089,30 +990,21 @@ class TUIChatSeparateViewModel extends ChangeNotifier { required ConvType convType}) async { if (await tools.hasZeroSize(filePath ?? "")) { final CoreServicesImpl _coreServices = serviceLocator(); - _coreServices.callOnCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: "不支持 0KB 文件的传输", - infoCode: 6660417)); + _coreServices.callOnCallback( + TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: "不支持 0KB 文件的传输", infoCode: 6660417)); return null; } final fileMessageInfo = await _messageService.createFileMessage( - inputElement: inputElement, - fileName: fileName ?? filePath?.split('/').last ?? "", - filePath: filePath); + inputElement: inputElement, fileName: fileName ?? filePath?.split('/').last ?? "", filePath: filePath); List currentHistoryMsgList = getOriginMessageList(); final messageInfo = fileMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, fileMessageInfo.id); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, fileMessageInfo.id); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); messageInfoWithSender.fileElem!.fileSize = size; - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1122,8 +1014,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { messageInfo: messageInfoWithSender, id: fileMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - fileMessageInfo.messageInfo!, convID, convType), + offlinePushInfo: tools.buildMessagePushInfo(fileMessageInfo.messageInfo!, convID, convType), ); } return null; @@ -1136,20 +1027,15 @@ class TUIChatSeparateViewModel extends ChangeNotifier { required String convID, required ConvType convType}) async { List currentHistoryMsgList = getOriginMessageList(); - final locationMessageInfo = await _messageService.createLocationMessage( - desc: desc, longitude: longitude, latitude: latitude); + final locationMessageInfo = + await _messageService.createLocationMessage(desc: desc, longitude: longitude, latitude: latitude); final messageInfo = locationMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, locationMessageInfo.id); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, locationMessageInfo.id); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1157,8 +1043,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, id: locationMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - locationMessageInfo.messageInfo!, convID, convType), + offlinePushInfo: tools.buildMessagePushInfo(locationMessageInfo.messageInfo!, convID, convType), ); } return null; @@ -1183,10 +1068,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { // 如果转发的会话是当前会话,则直接添加到当前会话的消息列表中 if (convID == conversationID) { if (globalModel.getMessageListPosition(convID) != HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfo, - ...currentHistoryMsgList - ]; + currentHistoryMsgList = [messageInfo, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1197,9 +1079,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, convType: convType == 1 ? ConvType.c2c : ConvType.group, offlinePushInfo: tools.buildMessagePushInfo( - forwardMessageInfo.messageInfo!, - convID, - convType == 1 ? ConvType.c2c : ConvType.group), + forwardMessageInfo.messageInfo!, convID, convType == 1 ? ConvType.c2c : ConvType.group), ); }); } @@ -1214,19 +1094,14 @@ class TUIChatSeparateViewModel extends ChangeNotifier { required List abstractList, required BuildContext context, }) async { - final List msgIDList = getSelectedMessageList() - .map((e) => e.msgID ?? "") - .where((element) => element != "") - .toList(); + final List msgIDList = + getSelectedMessageList().map((e) => e.msgID ?? "").where((element) => element != "").toList(); for (var conversation in conversationList) { final convID = conversation.groupID ?? conversation.userID ?? ""; final convType = conversation.type; List currentHistoryMsgList = globalModel.messageListMap[conversationID] ?? []; final mergerMessageInfo = await _messageService.createMergerMessage( - msgIDList: msgIDList, - title: title, - abstractList: abstractList, - compatibleText: TIM_t("该版本不支持此消息")); + msgIDList: msgIDList, title: title, abstractList: abstractList, compatibleText: TIM_t("该版本不支持此消息")); final messageInfo = mergerMessageInfo!.messageInfo; if (messageInfo != null) { tools.setUserInfoForMessage(messageInfo, mergerMessageInfo.id); @@ -1235,10 +1110,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { // 如果转发的会话是当前会话,则直接添加到当前会话的消息列表中 if (convID == conversationID) { if (globalModel.getMessageListPosition(convID) != HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfo, - ...currentHistoryMsgList - ]; + currentHistoryMsgList = [messageInfo, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1248,9 +1120,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, convType: convType == 1 ? ConvType.c2c : ConvType.group, offlinePushInfo: tools.buildMessagePushInfo( - mergerMessageInfo.messageInfo!, - convID, - convType == 1 ? ConvType.c2c : ConvType.group), + mergerMessageInfo.messageInfo!, convID, convType == 1 ? ConvType.c2c : ConvType.group), ); } } @@ -1271,24 +1141,17 @@ class TUIChatSeparateViewModel extends ChangeNotifier { message.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(message.msgID); globalModel.setMessageList(convID, currentHistoryMsgList); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - message, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [message, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } // 重发该消息 - final res = await _messageService.reSendMessage( - msgID: message.msgID ?? "", onlineUserOnly: false); + final res = await _messageService.reSendMessage(msgID: message.msgID ?? "", onlineUserOnly: false); removeSendingMessageID(message.msgID ?? ""); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - globalModel.updateMessage( - res, convID, message.msgID!, convType, groupType, setInputField); + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + globalModel.updateMessage(res, convID, message.msgID!, convType, groupType, setInputField); } if (lifeCycle?.messageDidSend != null) { @@ -1298,9 +1161,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } Future?> sendTextMessage( - {required String text, - required String convID, - required ConvType convType}) async { + {required String text, required String convID, required ConvType convType}) async { if (text.isEmpty) { return null; } @@ -1308,16 +1169,11 @@ class TUIChatSeparateViewModel extends ChangeNotifier { List currentHistoryMsgList = getOriginMessageList(); final messageInfo = textMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = - tools.setUserInfoForMessage(messageInfo, textMessageInfo.id!); + final messageInfoWithSender = tools.setUserInfoForMessage(messageInfo, textMessageInfo.id!); messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); _notify(); } @@ -1326,14 +1182,14 @@ class TUIChatSeparateViewModel extends ChangeNotifier { convID: convID, id: textMessageInfo.id as String, convType: convType, - offlinePushInfo: tools.buildMessagePushInfo( - textMessageInfo.messageInfo!, convID, convType)); + offlinePushInfo: tools.buildMessagePushInfo(textMessageInfo.messageInfo!, convID, convType)); } return null; } Future?>? sendMessageFromController({ required V2TimMessage? messageInfo, + /// Offline push info OfflinePushInfo? offlinePushInfo, MessagePriorityEnum priority = MessagePriorityEnum.V2TIM_PRIORITY_NORMAL, @@ -1345,17 +1201,12 @@ class TUIChatSeparateViewModel extends ChangeNotifier { }) { List currentHistoryMsgList = getOriginMessageList(); if (messageInfo != null) { - final messageInfoWithSender = messageInfo.sender == null - ? tools.setUserInfoForMessage(messageInfo, messageInfo.id!) - : messageInfo; + final messageInfoWithSender = + messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id!) : messageInfo; messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; addSendingMessageID(messageInfo.id); - if (globalModel.getMessageListPosition(conversationID) != - HistoryMessagePosition.notShowLatest) { - currentHistoryMsgList = [ - messageInfoWithSender, - ...currentHistoryMsgList - ]; + if (globalModel.getMessageListPosition(conversationID) != HistoryMessagePosition.notShowLatest) { + currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; globalModel.setMessageList(conversationID, currentHistoryMsgList); } @@ -1370,8 +1221,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { id: messageInfo.id as String, convType: conversationType ?? ConvType.c2c, offlinePushInfo: offlinePushInfo ?? - tools.buildMessagePushInfo( - messageInfo, conversationID, conversationType ?? ConvType.c2c), + tools.buildMessagePushInfo(messageInfo, conversationID, conversationType ?? ConvType.c2c), isExcludedFromContentModeration: messageInfo.isExcludedFromContentModeration, ); } @@ -1379,13 +1229,11 @@ class TUIChatSeparateViewModel extends ChangeNotifier { } deleteMsg(String msgID, {String? id, Object? webMessageInstance}) async { - if (lifeCycle?.shouldDeleteMessage != null && - await lifeCycle!.shouldDeleteMessage(msgID) == false) { + if (lifeCycle?.shouldDeleteMessage != null && await lifeCycle!.shouldDeleteMessage(msgID) == false) { return; } final messageList = getOriginMessageList(); - final res = await _messageService.deleteMessages( - msgIDs: [msgID], webMessageInstanceList: [webMessageInstance]); + final res = await _messageService.deleteMessages(msgIDs: [msgID], webMessageInstanceList: [webMessageInstance]); if (res.code == 0) { messageList.removeWhere((element) { return element.msgID == msgID || (id != null && element.id == id); @@ -1396,34 +1244,29 @@ class TUIChatSeparateViewModel extends ChangeNotifier { clearHistory() async { if (lifeCycle?.shouldClearHistoricalMessageList != null && - await lifeCycle!.shouldClearHistoricalMessageList(conversationID) == - false) { + await lifeCycle!.shouldClearHistoricalMessageList(conversationID) == false) { return; } globalModel.setMessageList(conversationID, []); } - Future revokeMsg(String msgID, bool isAdmin, - [Object? webMessageInstance]) async { + Future revokeMsg(String msgID, bool isAdmin, [Object? webMessageInstance]) async { if (chatConfig.isGroupAdminRecallEnabled) { - final V2TimMessage? message = globalModel.messageListMap[conversationID] - ?.firstWhere((element) => element.msgID == msgID); + final V2TimMessage? message = + globalModel.messageListMap[conversationID]?.firstWhere((element) => element.msgID == msgID); if (message != null) { if (PlatformUtils().isWeb) { final decodedMessage = jsonDecode(message.messageFromWeb!); - decodedMessage["cloudCustomData"] = - jsonEncode({"isRevoke": true, "revokeByAdmin": isAdmin}); + decodedMessage["cloudCustomData"] = jsonEncode({"isRevoke": true, "revokeByAdmin": isAdmin}); message.messageFromWeb = jsonEncode(decodedMessage); } else { - message.cloudCustomData = - jsonEncode({"isRevoke": true, "revokeByAdmin": isAdmin}); + message.cloudCustomData = jsonEncode({"isRevoke": true, "revokeByAdmin": isAdmin}); } return await modifyMessage(message: message); } } - final res = await _messageService.revokeMessage( - msgID: msgID, webMessageInstance: webMessageInstance); + final res = await _messageService.revokeMessage(msgID: msgID, webMessageInstance: webMessageInstance); if (res.code == 0) { globalModel.onMessageRevoked(msgID, conversationID); } @@ -1443,8 +1286,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { final msgIDs = getSelectedMessageIDList(); final webMessageInstanceList = getSelectedMessageIDList(); - final res = await _messageService.deleteMessages( - msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList); + final res = await _messageService.deleteMessages(msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList); if (res.code == 0) { for (var msgID in msgIDs) { messageList.removeWhere((element) => element.msgID == msgID); @@ -1461,11 +1303,10 @@ class TUIChatSeparateViewModel extends ChangeNotifier { _notify(); } - Future> - getGroupMessageReadMemberList(String messageID, - GetGroupMessageReadMemberListFilter fileter, int nextSeq) async { - final res = await _messageService.getGroupMessageReadMemberList( - nextSeq: nextSeq, messageID: messageID, filter: fileter); + Future> getGroupMessageReadMemberList( + String messageID, GetGroupMessageReadMemberListFilter fileter, int nextSeq) async { + final res = + await _messageService.getGroupMessageReadMemberList(nextSeq: nextSeq, messageID: messageID, filter: fileter); return res; } @@ -1481,8 +1322,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { Future findMessage(String msgID) async { List messageList = getOriginMessageList(); - final repliedMessage = - messageList.where((element) => element.msgID == msgID).toList(); + final repliedMessage = messageList.where((element) => element.msgID == msgID).toList(); if (repliedMessage.isNotEmpty) { return repliedMessage.first; } @@ -1496,8 +1336,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { showLatestUnread() { globalModel.unreadCountForTongue = 0; markMessageAsRead(); - globalModel.setMessageListPosition( - conversationID, HistoryMessagePosition.bottom); + globalModel.setMessageListPosition(conversationID, HistoryMessagePosition.bottom); } // 添加发送中的消息的 id 或者 msgID(id 不存在时使用 msgID) @@ -1515,7 +1354,7 @@ class TUIChatSeparateViewModel extends ChangeNotifier { // 是否已经延迟渲染 bool? hasDelayedRenderSendingStatus(String id) { if (_sendingMessageIDMap.containsKey(id)) { - return _sendingMessageIDMap[id]; + return _sendingMessageIDMap[id]; } return true; diff --git a/lib/business_logic/separate_models/tui_group_profile_model.dart b/lib/business_logic/separate_models/tui_group_profile_model.dart index a74dacf..4f58576 100644 --- a/lib/business_logic/separate_models/tui_group_profile_model.dart +++ b/lib/business_logic/separate_models/tui_group_profile_model.dart @@ -6,15 +6,24 @@ import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/receive_message_opt_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +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_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' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/group_profile_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/data_services/conversation/conversation_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart'; @@ -108,12 +117,17 @@ class TUIGroupProfileModel extends ChangeNotifier { if (seq == null || seq == "" || seq == "0") { _groupMemberList?.clear(); } - final res = await _groupServices.getGroupMemberList(groupID: groupID, filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ALL, count: count, nextSeq: seq ?? _groupMemberListSeq); + final res = await _groupServices.getGroupMemberList( + groupID: groupID, + filter: GroupMemberFilterTypeEnum.V2TIM_GROUP_MEMBER_FILTER_ALL, + count: count, + nextSeq: seq ?? _groupMemberListSeq); final groupMemberListRes = res.data; if (res.code == 0 && groupMemberListRes != null) { final groupMemberListTemp = groupMemberListRes.memberInfoList ?? []; // TODO - outputLogger.i("loadGroupMemberListfinish,groupMemberListTemp, ${groupMemberListRes.nextSeq}, ${groupMemberListTemp.length}"); + outputLogger.i( + "loadGroupMemberListfinish,groupMemberListTemp, ${groupMemberListRes.nextSeq}, ${groupMemberListTemp.length}"); _groupMemberList = [...?_groupMemberList, ...groupMemberListTemp]; _groupMemberListSeq = groupMemberListRes.nextSeq ?? "0"; } @@ -136,14 +150,18 @@ class TUIGroupProfileModel extends ChangeNotifier { } setMessageDisturb(bool value) async { - final res = await _messageService.setGroupReceiveMessageOpt(groupID: _groupID, opt: value ? ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE : ReceiveMsgOptEnum.V2TIM_RECEIVE_MESSAGE); + final res = await _messageService.setGroupReceiveMessageOpt( + groupID: _groupID, + opt: value ? ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE : ReceiveMsgOptEnum.V2TIM_RECEIVE_MESSAGE); if (res.code == 0) { - conversation?.recvOpt = (value ? ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE : ReceiveMsgOptEnum.V2TIM_RECEIVE_MESSAGE).index; + conversation?.recvOpt = + (value ? ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE : ReceiveMsgOptEnum.V2TIM_RECEIVE_MESSAGE).index; } notifyListeners(); } - Future> searchGroupMember(V2TimGroupMemberSearchParam searchParam) async { + Future> searchGroupMember( + V2TimGroupMemberSearchParam searchParam) async { final res = await _groupServices.searchGroupMembers(searchParam: searchParam); if (res.code == 0) {} @@ -154,7 +172,9 @@ class TUIGroupProfileModel extends ChangeNotifier { if (_groupInfo != null) { String? originalGroupName = _groupInfo?.groupName; _groupInfo?.groupName = groupName; - final response = await _groupServices.setGroupInfo(info: V2TimGroupInfo.fromJson({"groupID": _groupID, "groupType": _groupInfo!.groupType, "groupName": groupName})); + V2TimGroupInfo v2timGroupInfo = V2TimGroupInfo(groupID: _groupID, groupType: _groupInfo!.groupType); + v2timGroupInfo.groupName = groupName; + final response = await _groupServices.setGroupInfo(info: v2timGroupInfo); if (response.code != 0) { _groupInfo?.groupName = originalGroupName; } @@ -166,7 +186,9 @@ class TUIGroupProfileModel extends ChangeNotifier { setGroupNotification(String notification) async { if (_groupInfo != null) { - final response = await _groupServices.setGroupInfo(info: V2TimGroupInfo.fromJson({"groupID": _groupID, "groupType": _groupInfo!.groupType, "notification": notification})); + V2TimGroupInfo v2timGroupInfo = V2TimGroupInfo(groupID: _groupID, groupType: _groupInfo!.groupType); + v2timGroupInfo.notification = notification; + final response = await _groupServices.setGroupInfo(info: v2timGroupInfo); if (response.code == 0) { notifyListeners(); _groupInfo?.notification = notification; @@ -208,7 +230,9 @@ class TUIGroupProfileModel extends ChangeNotifier { if (_groupInfo != null) { int? originalAddopt = _groupInfo?.groupAddOpt; _groupInfo?.groupAddOpt = addOpt; - final response = await _groupServices.setGroupInfo(info: V2TimGroupInfo.fromJson({"groupID": _groupID, "groupType": _groupInfo!.groupType, "groupAddOpt": addOpt})); + V2TimGroupInfo v2timGroupInfo = V2TimGroupInfo(groupID: _groupID, groupType: _groupInfo!.groupType); + v2timGroupInfo.groupAddOpt = addOpt; + final response = await _groupServices.setGroupInfo(info: v2timGroupInfo); if (response.code != 0) { _groupInfo?.groupAddOpt = originalAddopt; } @@ -219,7 +243,8 @@ class TUIGroupProfileModel extends ChangeNotifier { } Future setMemberToNormal(String userID) async { - final res = await _groupServices.setGroupMemberRole(groupID: _groupID, userID: userID, role: GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_MEMBER); + final res = await _groupServices.setGroupMemberRole( + groupID: _groupID, userID: userID, role: GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_MEMBER); if (res.code == 0) { final targetIndex = _groupMemberList!.indexWhere((e) => e!.userID == userID); if (targetIndex != -1) { @@ -233,7 +258,8 @@ class TUIGroupProfileModel extends ChangeNotifier { } Future setMemberToAdmin(String userID) async { - final res = await _groupServices.setGroupMemberRole(groupID: _groupID, userID: userID, role: GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_ADMIN); + final res = await _groupServices.setGroupMemberRole( + groupID: _groupID, userID: userID, role: GroupMemberRoleTypeEnum.V2TIM_GROUP_MEMBER_ROLE_ADMIN); if (res.code == 0) { final targetIndex = _groupMemberList!.indexWhere((e) => e!.userID == userID); if (targetIndex != -1) { @@ -252,7 +278,8 @@ class TUIGroupProfileModel extends ChangeNotifier { } // 把之前的群主更新为普通成员 - final preOwnerIndex = _groupMemberList!.indexWhere((e) => e!.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); + final preOwnerIndex = + _groupMemberList!.indexWhere((e) => e!.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); if (preOwnerIndex != -1) { final preOwnerElem = _groupMemberList![preOwnerIndex]; preOwnerElem?.role = GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER; @@ -297,7 +324,9 @@ class TUIGroupProfileModel extends ChangeNotifier { Future setMuteAll(bool muteAll) async { if (_groupInfo != null) { _groupInfo?.isAllMuted = muteAll; - final response = await _groupServices.setGroupInfo(info: V2TimGroupInfo.fromJson({"groupID": _groupInfo!.groupID, "groupType": _groupInfo!.groupType, "isAllMuted": muteAll})); + V2TimGroupInfo v2timGroupInfo = V2TimGroupInfo(groupID: _groupID, groupType: _groupInfo!.groupType); + v2timGroupInfo.isAllMuted = muteAll; + final response = await _groupServices.setGroupInfo(info: v2timGroupInfo); if (response.code != 0) { _groupInfo?.isAllMuted = muteAll; } diff --git a/lib/business_logic/separate_models/tui_profile_view_model.dart b/lib/business_logic/separate_models/tui_profile_view_model.dart index 46ed330..7225952 100644 --- a/lib/business_logic/separate_models/tui_profile_view_model.dart +++ b/lib/business_logic/separate_models/tui_profile_view_model.dart @@ -3,11 +3,16 @@ import 'package:flutter/material.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/receive_message_opt_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_operation_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/profile_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/model/profile_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_friendship_view_model.dart'; @@ -18,12 +23,9 @@ import 'package:tencent_cloud_chat_uikit/data_services/message/message_services. import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; class TUIProfileViewModel extends ChangeNotifier { - final ConversationService _conversationService = - serviceLocator(); - final FriendshipServices _friendshipServices = - serviceLocator(); - final TUIFriendShipViewModel _friendShipViewModel = - serviceLocator(); + final ConversationService _conversationService = serviceLocator(); + final FriendshipServices _friendshipServices = serviceLocator(); + final TUIFriendShipViewModel _friendShipViewModel = serviceLocator(); final CoreServicesImpl _coreServices = serviceLocator(); final MessageService _messageService = serviceLocator(); @@ -59,16 +61,14 @@ class TUIProfileViewModel extends ChangeNotifier { } loadData({required String userID, bool isNeedConversation = true}) async { - if(userID.isEmpty){ + if (userID.isEmpty) { return; } V2TimFriendInfo? friendUserInfo; V2TimConversation? conversation; - final userInfoList = - await _friendshipServices.getFriendsInfo(userIDList: [userID]); - final checkFriend = await _friendshipServices.checkFriend( - userIDList: [userID], - checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_SINGLE); + final userInfoList = await _friendshipServices.getFriendsInfo(userIDList: [userID]); + final checkFriend = + await _friendshipServices.checkFriend(userIDList: [userID], checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_SINGLE); if (checkFriend != null) { final res = checkFriend.first; @@ -82,42 +82,33 @@ class TUIProfileViewModel extends ChangeNotifier { } if (isNeedConversation) { - conversation = await _conversationService.getConversation( - conversationID: "c2c_$userID"); + conversation = await _conversationService.getConversation(conversationID: "c2c_$userID"); _isDisturb = conversation?.recvOpt == 2; } - final friendInfo = - await _lifeCycle?.didGetFriendInfo(friendUserInfo) ?? friendUserInfo; + final friendInfo = await _lifeCycle?.didGetFriendInfo(friendUserInfo) ?? friendUserInfo; _isDisturb = conversation?.recvOpt == 2; - _userProfile = - UserProfile(friendInfo: friendInfo, conversation: conversation); + _userProfile = UserProfile(friendInfo: friendInfo, conversation: conversation); - _shouldAddToBlackList = _friendShipViewModel.blockList - .indexWhere((element) => element.userID == userID) > - -1; + _shouldAddToBlackList = _friendShipViewModel.blockList.indexWhere((element) => element.userID == userID) > -1; notifyListeners(); } Future pinedConversation(bool isPined, String convID) async { - final res = await _conversationService.pinConversation( - conversationID: convID, isPinned: isPined); + final res = await _conversationService.pinConversation(conversationID: convID, isPinned: isPined); _userProfile?.conversation!.isPinned = isPined; notifyListeners(); return res; } - Future?> addToBlackList( - bool shouldAdd, String userID) async { - if (_lifeCycle?.shouldAddToBlockList != null && - await _lifeCycle!.shouldAddToBlockList(userID) == false) { + Future?> addToBlackList(bool shouldAdd, String userID) async { + if (_lifeCycle?.shouldAddToBlockList != null && await _lifeCycle!.shouldAddToBlockList(userID) == false) { return null; } if (shouldAdd) { - final res = - await _friendshipServices.addToBlackList(userIDList: [userID]); + final res = await _friendshipServices.addToBlackList(userIDList: [userID]); if (res != null && res.isNotEmpty) { final result = res.first; if (result.resultCode == 0) { @@ -128,15 +119,13 @@ class TUIProfileViewModel extends ChangeNotifier { notifyListeners(); return res; } else { - final res = - await _friendshipServices.deleteFromBlackList(userIDList: [userID]); + final res = await _friendshipServices.deleteFromBlackList(userIDList: [userID]); if (res != null && res.isNotEmpty) { final result = res.first; if (result.resultCode == 0) { _shouldAddToBlackList = false; - final checkFriend = await _friendshipServices.checkFriend( - userIDList: [userID], - checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_SINGLE); + final checkFriend = await _friendshipServices + .checkFriend(userIDList: [userID], checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_SINGLE); if (checkFriend != null) { final res = checkFriend.first; _friendType = res.resultType; @@ -150,13 +139,11 @@ class TUIProfileViewModel extends ChangeNotifier { } Future deleteFriend(String userID, {bool needUpdateData = true}) async { - if (_lifeCycle?.shouldDeleteFriend != null && - await _lifeCycle!.shouldDeleteFriend(userID) == false) { + if (_lifeCycle?.shouldDeleteFriend != null && await _lifeCycle!.shouldDeleteFriend(userID) == false) { return null; } - final res = await _friendshipServices.deleteFromFriendList( - userIDList: [userID], - deleteType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH); + final res = await _friendshipServices + .deleteFromFriendList(userIDList: [userID], deleteType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH); if (res != null) { _conversationService.deleteConversation(conversationID: "c2c_$userID"); if (needUpdateData) { @@ -169,11 +156,9 @@ class TUIProfileViewModel extends ChangeNotifier { } Future changeFriendVerificationMethod(int allowType) async { - final res = await _coreServices.setSelfInfo( - userFullInfo: V2TimUserFullInfo.fromJson( - {"allowType": allowType}, - ), - ); + V2TimUserFullInfo userFullInfo = V2TimUserFullInfo(); + userFullInfo.allowType = allowType; + final res = await _coreServices.setSelfInfo(userFullInfo: userFullInfo); if (res.code == 0) { _userProfile?.friendInfo!.userProfile!.allowType = allowType; notifyListeners(); @@ -182,12 +167,10 @@ class TUIProfileViewModel extends ChangeNotifier { } Future addFriend(String userID) async { - if (_lifeCycle?.shouldAddFriend != null && - await _lifeCycle!.shouldAddFriend(userID) == false) { + if (_lifeCycle?.shouldAddFriend != null && await _lifeCycle!.shouldAddFriend(userID) == false) { return null; } - final res = await _friendshipServices.addFriend( - userID: userID, addType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH); + final res = await _friendshipServices.addFriend(userID: userID, addType: FriendTypeEnum.V2TIM_FRIEND_TYPE_BOTH); if (res.code == 0) { loadData(userID: userID); return res.data; @@ -197,8 +180,7 @@ class TUIProfileViewModel extends ChangeNotifier { } Future updateRemarks(String userID, String remark) async { - final res = await _friendshipServices.setFriendInfo( - userID: userID, friendRemark: remark); + final res = await _friendshipServices.setFriendInfo(userID: userID, friendRemark: remark); if (res.code == 0) { _userProfile?.friendInfo!.friendRemark = remark; @@ -210,9 +192,7 @@ class TUIProfileViewModel extends ChangeNotifier { Future setMessageDisturb(String userID, bool isDisturb) async { final res = await _messageService.setC2CReceiveMessageOpt( userIDList: [userID], - opt: isDisturb - ? ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE - : ReceiveMsgOptEnum.V2TIM_RECEIVE_MESSAGE); + opt: isDisturb ? ReceiveMsgOptEnum.V2TIM_RECEIVE_NOT_NOTIFY_MESSAGE : ReceiveMsgOptEnum.V2TIM_RECEIVE_MESSAGE); if (res.code == 0) { _isDisturb = isDisturb; } @@ -221,7 +201,7 @@ class TUIProfileViewModel extends ChangeNotifier { } updateUserInfo(V2TimUserFullInfo userFullInfo) { - if (userFullInfo.nickName != null) { + if (userFullInfo.nickName != null) { _userProfile?.friendInfo!.userProfile?.nickName = userFullInfo.nickName; } if (userFullInfo.faceUrl != null) { diff --git a/lib/business_logic/view_models/tui_chat_global_model.dart b/lib/business_logic/view_models/tui_chat_global_model.dart index 9346de2..d186b59 100644 --- a/lib/business_logic/view_models/tui_chat_global_model.dart +++ b/lib/business_logic/view_models/tui_chat_global_model.dart @@ -12,15 +12,24 @@ import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_custom_elem.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_image.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_download_progress.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_custom_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_custom_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_application.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_image.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_image.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_download_progress.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_download_progress.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_receipt.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_msg_create_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/chat_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_model_tools.dart'; @@ -58,7 +67,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { ChatLifeCycle? _lifeCycle; bool _isDownloading = false; - final List> _waitingDownloadList = List.empty(growable: true); // example {"savePath":"","url":"",msgId:""} + final List> _waitingDownloadList = + List.empty(growable: true); // example {"savePath":"","url":"",msgId:""} int _totalUnreadCount = 0; String localKeyPrefix = "TUIKit_conversation_stored_"; String localMsgIDListKey = "TUIKit_conversation_list"; @@ -210,9 +220,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { Map get messageReadReceiptMap => _messageReadReceiptMap; - String get currentSelectedConv => _currentConversationList.isNotEmpty ? _currentConversationList[_currentConversationList.length - 1].conversationID : ""; + String get currentSelectedConv => _currentConversationList.isNotEmpty + ? _currentConversationList[_currentConversationList.length - 1].conversationID + : ""; - ConvType? get currentSelectedConvType => _currentConversationList.isNotEmpty ? _currentConversationList[_currentConversationList.length - 1].conversationType : null; + ConvType? get currentSelectedConvType => _currentConversationList.isNotEmpty + ? _currentConversationList[_currentConversationList.length - 1].conversationType + : null; setCurrentConversation(CurrentConversation value) { _currentConversationList.add(value); @@ -221,7 +235,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { clearCurrentConversation() { // Only keep the last 20 messages when existing a chat. - _messageListMap[currentSelectedConv] = (_messageListMap[currentSelectedConv] ?? []).sublist(0, max(0, min(10, ((_messageListMap[currentSelectedConv] ?? []).length - 1)))); + _messageListMap[currentSelectedConv] = (_messageListMap[currentSelectedConv] ?? []) + .sublist(0, max(0, min(10, ((_messageListMap[currentSelectedConv] ?? []).length - 1)))); if (_currentConversationList.isNotEmpty) { _currentConversationList.removeLast(); } @@ -290,11 +305,14 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { if (conversationItem == null || conversationItem.type == null) { return; } - final conversationID = TencentUtils.checkString(conversationItem.userID) ?? TencentUtils.checkString(conversationItem.groupID) ?? conversationItem.conversationID; + final conversationID = TencentUtils.checkString(conversationItem.userID) ?? + TencentUtils.checkString(conversationItem.groupID) ?? + conversationItem.conversationID; if (messageListMap[conversationID] == null || messageListMap[conversationID]!.isEmpty) { index++; Future.delayed(Duration(milliseconds: 500 * index), () { - preloadMessageForConversation(conversationID: conversationID, conversationType: ConvType.values[conversationItem.type!]); + preloadMessageForConversation( + conversationID: conversationID, conversationType: ConvType.values[conversationItem.type!]); }); } } @@ -305,7 +323,10 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { required String conversationID, }) async { final response = await _messageService.getHistoryMessageList( - count: 10, getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, userID: conversationType == ConvType.c2c ? conversationID : null, groupID: conversationType == ConvType.group ? conversationID : null); + count: 10, + getType: HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + userID: conversationType == ConvType.c2c ? conversationID : null, + groupID: conversationType == ConvType.group ? conversationID : null); if (_messageListMap[conversationID] == null || _messageListMap[conversationID]!.isEmpty) { _messageListMap[conversationID] = response; } @@ -324,9 +345,11 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { prefs.remove(localMsgIDListKey); } - Future updateMessageFromController({required String msgID, required String conversationID, required ConvType conversationType}) async { + Future updateMessageFromController( + {required String msgID, required String conversationID, required ConvType conversationType}) async { final TUIChatModelTools tools = serviceLocator(); - V2TimMessage? newMessage = await tools.getExistingMessageByID(msgID: msgID, conversationID: conversationID, conversationType: conversationType); + V2TimMessage? newMessage = await tools.getExistingMessageByID( + msgID: msgID, conversationID: conversationID, conversationType: conversationType); if (newMessage != null) { onMessageModified(newMessage, currentSelectedConv); } @@ -352,7 +375,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { List needPreViewList = msgList.sublist(0, max(0, min(5, msgList.length - 1))); for (var msgItem in needPreViewList) { V2TimImage? getImageFromList(V2TimImageTypesEnum imgType) { - V2TimImage? img = MessageUtils.getImageFromImgList(msgItem.imageElem?.imageList, HistoryMessageDartConstant.imgPriorMap[imgType] ?? HistoryMessageDartConstant.oriImgPrior); + V2TimImage? img = MessageUtils.getImageFromImgList(msgItem.imageElem?.imageList, + HistoryMessageDartConstant.imgPriorMap[imgType] ?? HistoryMessageDartConstant.oriImgPrior); return img; } @@ -487,7 +511,13 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { return; } V2TimMsgCreateInfoResult? res = await _messageService.createCustomMessage( - data: json.encode({"businessID": "user_typing_status", "typingStatus": isEditing == true ? 1 : 0, "userAction": 14, "version": 0, "actionParam": isEditing == true ? "EIMAMSG_InputStatus_Ing" : "EIMAMSG_InputStatus_End"})); + data: json.encode({ + "businessID": "user_typing_status", + "typingStatus": isEditing == true ? 1 : 0, + "userAction": 14, + "version": 0, + "actionParam": isEditing == true ? "EIMAMSG_InputStatus_Ing" : "EIMAMSG_InputStatus_End" + })); if (res != null) { _sendMessage( id: res.id!, @@ -524,11 +554,12 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { _onReceiveNewMsg(V2TimMessage msgComing) async { final convID = TencentUtils.checkString(msgComing.userID) ?? msgComing.groupID; - if(convID != currentSelectedConv){ + if (convID != currentSelectedConv) { return; } - final V2TimMessage? newMsg = _lifeCycle?.newMessageWillMount != null ? await _lifeCycle?.newMessageWillMount(msgComing) : msgComing; + final V2TimMessage? newMsg = + _lifeCycle?.newMessageWillMount != null ? await _lifeCycle?.newMessageWillMount(msgComing) : msgComing; if (newMsg == null) { return; } @@ -583,27 +614,24 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { onMessageRevoked(String msgID, [String? convID]) { final activeMessageList = _messageListMap[convID ?? currentSelectedConv]; if (activeMessageList != null) { - final findeIndex = activeMessageList.indexWhere((element) => element.msgID == msgID); - if (findeIndex != -1) { - final findeIndex = activeMessageList.indexWhere((element) => element.msgID == msgID); - if (findeIndex != -1) { - final targetItem = activeMessageList[findeIndex]; - targetItem.status = MessageStatus.V2TIM_MSG_STATUS_LOCAL_REVOKED; - targetItem.id = DateTime.now().millisecondsSinceEpoch.toString(); - activeMessageList[findeIndex] = targetItem; + final findIndex = activeMessageList.indexWhere((element) => element.msgID == msgID); + if (findIndex != -1) { + final targetItem = activeMessageList[findIndex]; + targetItem.status = MessageStatus.V2TIM_MSG_STATUS_LOCAL_REVOKED; + targetItem.id = DateTime.now().millisecondsSinceEpoch.toString(); + activeMessageList[findIndex] = targetItem; - bool isUnreadMessage = _receivedUnreadMessageList.any((element) => element.msgID == msgID); - if (!(targetItem.isSelf ?? true) && isUnreadMessage) { + bool isUnreadMessage = _receivedUnreadMessageList.any((element) => element.msgID == msgID); + if (!(targetItem.isSelf ?? true) && isUnreadMessage) { + if (_unreadCountForTongue > 0) { if (_unreadCountForTongue > 0) { - if (_unreadCountForTongue > 0) { - _unreadCountForTongue--; - } - if (_receivedNewMessageCount > 0) { - _receivedNewMessageCount--; - } - - _receivedUnreadMessageList.removeWhere((element) => element.msgID == targetItem.msgID); + _unreadCountForTongue--; } + if (_receivedNewMessageCount > 0) { + _receivedNewMessageCount--; + } + + _receivedUnreadMessageList.removeWhere((element) => element.msgID == targetItem.msgID); } } } @@ -615,7 +643,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { onMessageModified(V2TimMessage modifiedMessage, [String? convID]) async { modifiedMessage.id = DateTime.now().millisecondsSinceEpoch.toString(); - final String? exactId = TencentUtils.checkString(modifiedMessage.userID) ?? TencentUtils.checkString(modifiedMessage.groupID); + final String? exactId = + TencentUtils.checkString(modifiedMessage.userID) ?? TencentUtils.checkString(modifiedMessage.groupID); final activeMessageList = _messageListMap[convID ?? exactId]; if (activeMessageList == null || activeMessageList.isEmpty) { return; @@ -668,7 +697,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { Future onMessageDownloadProgressCallback(V2TimMessageDownloadProgress messageProgress) async { final currentProgress = getMessageProgress(messageProgress.msgID); - print("onMessageDownloadProgressCallback, ${messageProgress.type} - ${messageProgress.isFinish} - ${messageProgress.currentSize} - $currentProgress - "); + print( + "onMessageDownloadProgressCallback, ${messageProgress.type} - ${messageProgress.isFinish} - ${messageProgress.currentSize} - $currentProgress - "); if (messageProgress.isError || messageProgress.errorCode != 0) { V2TimMessage? message = await _findAndRetrieveMessage(messageProgress.msgID); @@ -697,7 +727,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { const originalImageType = 0; if (!isImageType && !isVideoType) { _updateMessageLocationAndDownloadFile(messageProgress); - } else if ((isImageType && messageProgress.type == originalImageType) || (isVideoType && !messageProgress.isSnapshot)) { + } else if ((isImageType && messageProgress.type == originalImageType) || + (isVideoType && !messageProgress.isSnapshot)) { Future.delayed(const Duration(seconds: 1), () => _updateMessageAndDownloadFile(message, messageProgress)); } else { return; @@ -713,7 +744,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { } void _updateMessageAndDownloadFile(V2TimMessage message, V2TimMessageDownloadProgress messageProgress) { - updateAsyncMessage(message, TencentUtils.checkString(message.userID) ?? TencentUtils.checkString(message.groupID) ?? ""); + updateAsyncMessage( + message, TencentUtils.checkString(message.userID) ?? TencentUtils.checkString(message.groupID) ?? ""); _updateMessageLocationAndDownloadFile(messageProgress); } @@ -771,7 +803,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { final TUIChatModelTools tools = serviceLocator(); List currentHistoryMsgList = _messageListMap[convID] ?? []; if (messageInfo != null) { - final messageInfoWithSender = messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id!) : messageInfo; + final messageInfoWithSender = + messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id!) : messageInfo; messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; currentHistoryMsgList = [messageInfoWithSender, ...currentHistoryMsgList]; setMessageList(convID, currentHistoryMsgList); @@ -792,7 +825,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { setInputField: setInputField, id: messageInfo.id as String, convType: ConvType.values[convType.index], - offlinePushInfo: offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]), + offlinePushInfo: + offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]), ); } return null; @@ -819,13 +853,20 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { V2TimMsgCreateInfoResult? textMessageInfo = await _messageService.createTextMessage(text: text); textMessageInfo = await _messageService.createTextAtMessage( - text: text + "\n@${TencentUtils.checkString(messageBeenReplied.nickName) ?? TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID)}", - atUserList: [TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID) ?? ""]); + text: text + + "\n@${TencentUtils.checkString(messageBeenReplied.nickName) ?? TencentUtils.checkString(messageBeenReplied.sender) ?? TencentUtils.checkString(messageBeenReplied.userID)}", + atUserList: [ + TencentUtils.checkString(messageBeenReplied.sender) ?? + TencentUtils.checkString(messageBeenReplied.userID) ?? + "" + ]); final V2TimMessage? messageInfo = textMessageInfo!.messageInfo; if (messageInfo != null) { - final messageInfoWithSender = messageInfo.sender == null ? tools.setUserInfoForMessage(messageInfo, messageInfo.id ?? textMessageInfo.id ?? "") : messageInfo; + final messageInfoWithSender = messageInfo.sender == null + ? tools.setUserInfoForMessage(messageInfo, messageInfo.id ?? textMessageInfo.id ?? "") + : messageInfo; messageInfoWithSender.status = MessageStatus.V2TIM_MSG_STATUS_SENDING; final hasNickName = messageBeenReplied.nickName != null && messageBeenReplied.nickName != ""; final cloudCustomData = { @@ -845,7 +886,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { return _sendMessage( cloudCustomData: json.encode(cloudCustomData), id: textMessageInfo.id as String, - offlinePushInfo: offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]), + offlinePushInfo: + offlinePushInfo ?? tools.buildMessagePushInfo(messageInfo, convID, ConvType.values[convType.index]), priority: priority, onlineUserOnly: onlineUserOnly, isExcludedFromUnreadCount: isExcludedFromUnreadCount, @@ -939,7 +981,8 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { return sendMsgRes; } - void setMessageList(String conversationID, List messageList, {bool needResetNewMessageCount = true, bool isDeleteMsg = false}) { + void setMessageList(String conversationID, List messageList, + {bool needResetNewMessageCount = true, bool isDeleteMsg = false}) { _messageListMap[conversationID] = messageList; if (needResetNewMessageCount) { _receivedNewMessageCount = 0; @@ -955,11 +998,14 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { notifyListeners(); } - updateMessage(V2TimValueCallback sendMsgRes, String convID, String id, ConvType convType, GroupReceiptAllowType? groupType, ValueChanged? setInputField) { + updateMessage(V2TimValueCallback sendMsgRes, String convID, String id, ConvType convType, + GroupReceiptAllowType? groupType, ValueChanged? setInputField) { List currentHistoryMsgList = _messageListMap[convID] ?? []; final V2TimMessage sendMsgResData = sendMsgRes.data as V2TimMessage; final findIdIndex = currentHistoryMsgList.indexWhere((element) => element.id == id); - final targetIndex = findIdIndex == -1 ? currentHistoryMsgList.indexWhere((element) => element.msgID == sendMsgResData.msgID) : findIdIndex; + final targetIndex = findIdIndex == -1 + ? currentHistoryMsgList.indexWhere((element) => element.msgID == sendMsgResData.msgID) + : findIdIndex; if (targetIndex != -1) { currentHistoryMsgList[targetIndex] = sendMsgResData; } else { @@ -998,13 +1044,18 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { } List? getMessageList(String conversationID) { - final list = (messageListMap[conversationID]?.reversed.toList() ?? []).where((element) => _lifeCycle?.messageShouldMount(element) ?? true).toList(); + final list = (messageListMap[conversationID]?.reversed.toList() ?? []) + .where((element) => _lifeCycle?.messageShouldMount(element) ?? true) + .toList(); final finalList = _lifeCycle?.messageListShouldMount(list) ?? list; final List listWithTimestamp = []; final interval = chatConfig.timeDividerConfig?.timeInterval ?? 300; for (var item in finalList) { { - if (listWithTimestamp.isEmpty || (listWithTimestamp[listWithTimestamp.length - 1].timestamp != null && item.timestamp != null && (item.timestamp! - listWithTimestamp[listWithTimestamp.length - 1].timestamp! > interval))) { + if (listWithTimestamp.isEmpty || + (listWithTimestamp[listWithTimestamp.length - 1].timestamp != null && + item.timestamp != null && + (item.timestamp! - listWithTimestamp[listWithTimestamp.length - 1].timestamp! > interval))) { listWithTimestamp.add(V2TimMessage( userID: '', isSelf: false, @@ -1013,7 +1064,7 @@ class TUIChatGlobalModel extends ChangeNotifier implements TIMUIKitClass { timestamp: item.timestamp, )); } - listWithTimestamp.add(V2TimMessage.fromJson(item.toJson())); + listWithTimestamp.add(item); } } return listWithTimestamp.reversed.toList(); diff --git a/lib/business_logic/view_models/tui_conversation_view_model.dart b/lib/business_logic/view_models/tui_conversation_view_model.dart index d46dba5..0e34e70 100644 --- a/lib/business_logic/view_models/tui_conversation_view_model.dart +++ b/lib/business_logic/view_models/tui_conversation_view_model.dart @@ -3,9 +3,12 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimConversationListener.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_search_param.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/conversation_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; @@ -135,7 +138,7 @@ class TUIConversationViewModel extends ChangeNotifier { if (!PlatformUtils().isWeb) { loadInitConversation(); } - }, onConversationDeleted:(List conversationIDList) { + }, onConversationDeleted: (List conversationIDList) { _onConversationDeleted(conversationIDList); for (var conversationID in conversationIDList) { String resultID = ""; @@ -181,8 +184,10 @@ class TUIConversationViewModel extends ChangeNotifier { } else { combinedConversationList = [..._conversationList, ...conversationList]; } - final List finalConversationList = await _lifeCycle?.conversationListWillMount(combinedConversationList) ?? combinedConversationList; - _conversationList = removeDuplicates(finalConversationList, (item1, item2) => item1?.conversationID == item2?.conversationID); + final List finalConversationList = + await _lifeCycle?.conversationListWillMount(combinedConversationList) ?? combinedConversationList; + _conversationList = removeDuplicates( + finalConversationList, (item1, item2) => item1?.conversationID == item2?.conversationID); notifyListeners(); } _totalUnReadCount = await _conversationService.getTotalUnreadCount(); @@ -203,7 +208,8 @@ class TUIConversationViewModel extends ChangeNotifier { } Future clearHistoryMessage({required String convID, required int convType}) async { - if (_lifeCycle?.shouldClearHistoricalMessageForConversation != null && await _lifeCycle!.shouldClearHistoricalMessageForConversation(convID) == false) { + if (_lifeCycle?.shouldClearHistoricalMessageForConversation != null && + await _lifeCycle!.shouldClearHistoricalMessageForConversation(convID) == false) { return null; } @@ -222,7 +228,8 @@ class TUIConversationViewModel extends ChangeNotifier { } Future deleteConversation({required String conversationID}) async { - if (_lifeCycle?.shouldDeleteConversation != null && await _lifeCycle!.shouldDeleteConversation(conversationID) == false) { + if (_lifeCycle?.shouldDeleteConversation != null && + await _lifeCycle!.shouldDeleteConversation(conversationID) == false) { return null; } final res = await _conversationService.deleteConversation(conversationID: conversationID); @@ -251,7 +258,8 @@ class TUIConversationViewModel extends ChangeNotifier { int index = _conversationList.indexWhere((item) => item!.conversationID == list[i]); if (index > -1) { _conversationList.removeAt(index); - _conversationList = removeDuplicates(_conversationList, (item1, item2) => item1?.conversationID == item2?.conversationID); + _conversationList = removeDuplicates( + _conversationList, (item1, item2) => item1?.conversationID == item2?.conversationID); } } notifyListeners(); @@ -259,7 +267,8 @@ class TUIConversationViewModel extends ChangeNotifier { _addNewConversation(List list) { _conversationList.addAll(list); - _conversationList = removeDuplicates(_conversationList, (item1, item2) => item1?.conversationID == item2?.conversationID); + _conversationList = removeDuplicates( + _conversationList, (item1, item2) => item1?.conversationID == item2?.conversationID); notifyListeners(); } @@ -278,13 +287,16 @@ class TUIConversationViewModel extends ChangeNotifier { String? groupID, bool isAllowWeb = true, }) async { - assert(!isTopic || (groupID != null && groupID.isNotEmpty), "When 'isTopic' is true, 'groupID' must not be null or empty."); + assert(!isTopic || (groupID != null && groupID.isNotEmpty), + "When 'isTopic' is true, 'groupID' must not be null or empty."); if (PlatformUtils().isWeb && isAllowWeb) { webDraftMap[conversationID] = draftText ?? ""; return V2TimCallback(code: 0, desc: ""); } else { if (isTopic) { - final topicInfoList = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getTopicInfoList(groupID: groupID!, topicIDList: [conversationID]); + final topicInfoList = await TencentImSDKPlugin.v2TIMManager + .getGroupManager() + .getTopicInfoList(groupID: groupID!, topicIDList: [conversationID]); final topicInfo = topicInfoList.data?.first.topicInfo; topicInfo?.draftText = draftText; final res = await TencentImSDKPlugin.v2TIMManager.getGroupManager().setTopicInfo(topicInfo: topicInfo!); diff --git a/lib/business_logic/view_models/tui_friendship_view_model.dart b/lib/business_logic/view_models/tui_friendship_view_model.dart index f13a8d7..0aab526 100644 --- a/lib/business_logic/view_models/tui_friendship_view_model.dart +++ b/lib/business_logic/view_models/tui_friendship_view_model.dart @@ -4,12 +4,18 @@ import 'package:flutter/cupertino.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimFriendshipListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_application_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_response_type_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_application.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_operation_result.dart'; +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_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/block_list_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/friend_list_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/new_contact_life_cycle.dart'; @@ -19,11 +25,9 @@ import 'package:tencent_cloud_chat_uikit/data_services/group/group_services.dart import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; class TUIFriendShipViewModel extends ChangeNotifier { - final FriendshipServices _friendshipServices = - serviceLocator(); + final FriendshipServices _friendshipServices = serviceLocator(); final GroupServices _groupServices = serviceLocator(); - final TUISelfInfoViewModel selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoViewModel = serviceLocator(); late V2TimFriendshipListener friendShipListener; List? _friendApplicationList; List? _friendList; @@ -68,8 +72,7 @@ class TUIFriendShipViewModel extends ChangeNotifier { int get friendApplicationAmount => _friendApplicationAmount; - List? get friendApplicationList => - _friendApplicationList; + List? get friendApplicationList => _friendApplicationList; TUIFriendShipViewModel() { friendShipListener = V2TimFriendshipListener( @@ -125,21 +128,17 @@ class TUIFriendShipViewModel extends ChangeNotifier { } loadUserStatus() async { - if (selfInfoViewModel.globalConfig?.isShowOnlineStatus == false || - friendList == null || - friendList!.isEmpty) { + if (selfInfoViewModel.globalConfig?.isShowOnlineStatus == false || friendList == null || friendList!.isEmpty) { return; } final List> userIDSet = []; final int needHowManyRequest = ((friendList!.length) / 500).ceil(); - final int amountEachRequest = - ((friendList!.length) / needHowManyRequest).ceil(); + final int amountEachRequest = ((friendList!.length) / needHowManyRequest).ceil(); for (int i = 0; i < needHowManyRequest; i++) { userIDSet.add(friendList! - .getRange(i * amountEachRequest, - min(friendList!.length, (i + 1) * amountEachRequest)) + .getRange(i * amountEachRequest, min(friendList!.length, (i + 1) * amountEachRequest)) .map((e) => e.userID) .toList()); } @@ -161,19 +160,15 @@ class TUIFriendShipViewModel extends ChangeNotifier { final newContactRes = await _friendshipServices.getFriendApplicationList(); // Only Received Application _friendApplicationList = newContactRes?.friendApplicationList - ?.where((item) => - item!.type == - FriendApplicationTypeEnum.V2TIM_FRIEND_APPLICATION_COME_IN.index) + ?.where((item) => item!.type == FriendApplicationTypeEnum.V2TIM_FRIEND_APPLICATION_COME_IN.index) .toList(); _friendApplicationAmount = _friendApplicationList?.length ?? 0; notifyListeners(); } Future loadContactListData() async { - final List res = - await _friendshipServices.getFriendList() ?? []; - final memberList = - await _contactListLifeCycle?.friendListWillMount(res) ?? res; + final List res = await _friendshipServices.getFriendList() ?? []; + final memberList = await _contactListLifeCycle?.friendListWillMount(res) ?? res; _friendList = memberList; notifyListeners(); return; @@ -206,15 +201,12 @@ class TUIFriendShipViewModel extends ChangeNotifier { return; } - Future?> deleteFromBlockList( - List userIDList) async { + Future?> deleteFromBlockList(List userIDList) async { if (_blockListLifeCycle?.shouldDeleteFromBlockList != null && - await _blockListLifeCycle!.shouldDeleteFromBlockList(userIDList) == - false) { + await _blockListLifeCycle!.shouldDeleteFromBlockList(userIDList) == false) { return null; } - final res = - await _friendshipServices.deleteFromBlackList(userIDList: userIDList); + final res = await _friendshipServices.deleteFromBlackList(userIDList: userIDList); if (res != null) { return res; } @@ -226,8 +218,7 @@ class TUIFriendShipViewModel extends ChangeNotifier { int type, ) async { if (_newContactLifeCycle?.shouldAcceptContactApplication != null && - await _newContactLifeCycle!.shouldAcceptContactApplication(userID) == - false) { + await _newContactLifeCycle!.shouldAcceptContactApplication(userID) == false) { return null; } final res = await _friendshipServices.acceptFriendApplication( @@ -246,8 +237,7 @@ class TUIFriendShipViewModel extends ChangeNotifier { int type, ) async { if (_newContactLifeCycle?.shouldRefuseContactApplication != null && - await _newContactLifeCycle!.shouldRefuseContactApplication(userID) == - false) { + await _newContactLifeCycle!.shouldRefuseContactApplication(userID) == false) { return null; } final res = await _friendshipServices.refuseFriendApplication( @@ -262,8 +252,7 @@ class TUIFriendShipViewModel extends ChangeNotifier { Future> getGroupMembersInfo( {required String groupID, required List memberList}) async { - final res = await _groupServices.getGroupMembersInfo( - groupID: groupID, memberList: memberList); + final res = await _groupServices.getGroupMembersInfo(groupID: groupID, memberList: memberList); return res.data ?? []; } diff --git a/lib/business_logic/view_models/tui_search_view_model.dart b/lib/business_logic/view_models/tui_search_view_model.dart index 43fa2c4..0d18d53 100644 --- a/lib/business_logic/view_models/tui_search_view_model.dart +++ b/lib/business_logic/view_models/tui_search_view_model.dart @@ -2,31 +2,34 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result_item.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_search_param.dart'; +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_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result_item.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_result_item.dart'; import 'package:tencent_cloud_chat_uikit/data_services/friendShip/friendship_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/conversation/conversation_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/group/group_services.dart'; -enum KeywordListMatchType { - V2TIM_KEYWORD_LIST_MATCH_TYPE_OR, - V2TIM_KEYWORD_LIST_MATCH_TYPE_AND -} +enum KeywordListMatchType { V2TIM_KEYWORD_LIST_MATCH_TYPE_OR, V2TIM_KEYWORD_LIST_MATCH_TYPE_AND } class TUISearchViewModel extends ChangeNotifier { - final FriendshipServices _friendshipServices = - serviceLocator(); + final FriendshipServices _friendshipServices = serviceLocator(); final MessageService _messageService = serviceLocator(); - final ConversationService _conversationService = - serviceLocator(); + final ConversationService _conversationService = serviceLocator(); final GroupServices _groupServices = serviceLocator(); List? friendList = []; @@ -43,8 +46,7 @@ class TUISearchViewModel extends ChangeNotifier { List conversationList = []; Future?> initConversationMsg() async { - final conversationResult = await _conversationService.getConversationList( - nextSeq: "0", count: 500); + final conversationResult = await _conversationService.getConversationList(nextSeq: "0", count: 500); final conversationListData = conversationResult?.conversationList; conversationList = conversationListData ?? []; notifyListeners(); @@ -60,21 +62,20 @@ class TUISearchViewModel extends ChangeNotifier { } void searchFriendByKey(String searchKey) async { - final searchResult = await _friendshipServices.searchFriends( - searchParam: V2TimFriendSearchParam(keywordList: [searchKey])); + final searchResult = + await _friendshipServices.searchFriends(searchParam: V2TimFriendSearchParam(keywordList: [searchKey])); friendList = searchResult; notifyListeners(); } void searchGroupByKey(String searchKey) async { - final searchResult = await _groupServices.searchGroups( - searchParam: V2TimGroupSearchParam(keywordList: [searchKey])); + final searchResult = + await _groupServices.searchGroups(searchParam: V2TimGroupSearchParam(keywordList: [searchKey])); groupList = searchResult.data ?? []; notifyListeners(); } - void getMsgForConversation( - String keyword, String conversationId, int page) async { + void getMsgForConversation(String keyword, String conversationId, int page) async { void clearData() { currentMsgListForConversation = []; totalMsgInConversationCount = 0; @@ -98,8 +99,7 @@ class TUISearchViewModel extends ChangeNotifier { type: KeywordListMatchType.V2TIM_KEYWORD_LIST_MATCH_TYPE_OR.index, )); if (searchResult.code == 0 && searchResult.data != null) { - final messageSearchResultItems = searchResult - .data!.messageSearchResultItems! + final messageSearchResultItems = searchResult.data!.messageSearchResultItems! .firstWhereOrNull((element) => element.conversationID == conversationId); totalMsgInConversationCount = messageSearchResultItems?.messageCount ?? 0; currentMsgListForConversation = [ diff --git a/lib/business_logic/view_models/tui_self_info_view_model.dart b/lib/business_logic/view_models/tui_self_info_view_model.dart index 2314487..adb435a 100644 --- a/lib/business_logic/view_models/tui_self_info_view_model.dart +++ b/lib/business_logic/view_models/tui_self_info_view_model.dart @@ -1,5 +1,6 @@ import 'package:flutter/cupertino.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/tim_uikit_config.dart'; class TUISelfInfoViewModel extends ChangeNotifier { diff --git a/lib/data_services/conversation/conversation_services.dart b/lib/data_services/conversation/conversation_services.dart index 2c8c7d3..5ff171e 100644 --- a/lib/data_services/conversation/conversation_services.dart +++ b/lib/data_services/conversation/conversation_services.dart @@ -1,7 +1,10 @@ import 'package:tencent_cloud_chat_sdk/enum/V2TimConversationListener.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation_result.dart'; abstract class ConversationService { Future getConversationList({ @@ -26,14 +29,11 @@ abstract class ConversationService { required V2TimConversationListener listener, }); - Future setConversationDraft( - {required String conversationID, String? draftText}); + Future setConversationDraft({required String conversationID, String? draftText}); - Future removeConversationListener( - {V2TimConversationListener? listener}); + Future removeConversationListener({V2TimConversationListener? listener}); Future getTotalUnreadCount(); - Future getConversationListByConversationId( - {required String convID}); + Future getConversationListByConversationId({required String convID}); } diff --git a/lib/data_services/conversation/conversation_services_implements.dart b/lib/data_services/conversation/conversation_services_implements.dart index fba7719..f7213ab 100644 --- a/lib/data_services/conversation/conversation_services_implements.dart +++ b/lib/data_services/conversation/conversation_services_implements.dart @@ -1,7 +1,10 @@ import 'package:tencent_cloud_chat_sdk/enum/V2TimConversationListener.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation_result.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/data_services/conversation/conversation_services.dart'; @@ -22,10 +25,8 @@ class ConversationServicesImpl extends ConversationService { if (result.code == 0) { return result.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); return null; } } @@ -39,10 +40,8 @@ class ConversationServicesImpl extends ConversationService { .getConversationManager() .pinConversation(conversationID: conversationID, isPinned: isPinned); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -55,10 +54,8 @@ class ConversationServicesImpl extends ConversationService { .getConversationManager() .deleteConversation(conversationID: conversationID); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -67,82 +64,60 @@ class ConversationServicesImpl extends ConversationService { Future addConversationListener({ required V2TimConversationListener listener, }) { - return TencentImSDKPlugin.v2TIMManager - .getConversationManager() - .addConversationListener(listener: listener); + return TencentImSDKPlugin.v2TIMManager.getConversationManager().addConversationListener(listener: listener); } @override Future getConversation({ required String conversationID, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getConversationManager() - .getConversation(conversationID: conversationID); + final res = + await TencentImSDKPlugin.v2TIMManager.getConversationManager().getConversation(conversationID: conversationID); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } return null; } @override - Future setConversationDraft( - {required String conversationID, String? draftText}) async { + Future setConversationDraft({required String conversationID, String? draftText}) async { final result = await TencentImSDKPlugin.v2TIMManager .getConversationManager() - .setConversationDraft( - conversationID: conversationID, draftText: draftText); + .setConversationDraft(conversationID: conversationID, draftText: draftText); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override - Future removeConversationListener( - {V2TimConversationListener? listener}) { - return TencentImSDKPlugin.v2TIMManager - .getConversationManager() - .removeConversationListener(listener: listener); + Future removeConversationListener({V2TimConversationListener? listener}) { + return TencentImSDKPlugin.v2TIMManager.getConversationManager().removeConversationListener(listener: listener); } @override - Future getConversationListByConversationId( - {required String convID}) async { + Future getConversationListByConversationId({required String convID}) async { final result = await TencentImSDKPlugin.v2TIMManager .getConversationManager() .getConversationListByConversationIds(conversationIDList: [convID]); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } - return (result.data != null && result.data!.isNotEmpty) - ? result.data![0] - : null; + return (result.data != null && result.data!.isNotEmpty) ? result.data![0] : null; } @override Future getTotalUnreadCount() async { - final res = await TencentImSDKPlugin.v2TIMManager - .getConversationManager() - .getTotalUnreadMessageCount(); + final res = await TencentImSDKPlugin.v2TIMManager.getConversationManager().getTotalUnreadMessageCount(); if (res.code == 0) { return res.data ?? 0; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return 0; } } diff --git a/lib/data_services/core/core_services.dart b/lib/data_services/core/core_services.dart index ee2998d..bff40e4 100644 --- a/lib/data_services/core/core_services.dart +++ b/lib/data_services/core/core_services.dart @@ -1,15 +1,17 @@ import 'package:flutter/cupertino.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimSDKListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/log_level_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/tim_uikit_config.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; - enum AppStatus { foreground, background } enum LanguageEnum { diff --git a/lib/data_services/core/core_services_implements.dart b/lib/data_services/core/core_services_implements.dart index 0adff1e..a8f9288 100644 --- a/lib/data_services/core/core_services_implements.dart +++ b/lib/data_services/core/core_services_implements.dart @@ -5,10 +5,14 @@ import 'package:flutter/cupertino.dart'; import 'package:tencent_chat_i18n_tool/tools/i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimSDKListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/log_level_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_setting_model.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/common_utils.dart'; @@ -38,8 +42,7 @@ class LoginInfo { final int sdkAppID; final V2TimUserFullInfo? loginUser; - LoginInfo( - {this.sdkAppID = 0, this.userSig = "", this.userID = "", this.loginUser}); + LoginInfo({this.sdkAppID = 0, this.userSig = "", this.userID = "", this.loginUser}); } class CoreServicesImpl implements CoreServices { @@ -56,11 +59,7 @@ class CoreServicesImpl implements CoreServices { } LoginInfo get loginInfo { - return LoginInfo( - sdkAppID: _sdkAppID, - userID: _userID, - userSig: _userSig, - loginUser: _loginInfo); + return LoginInfo(sdkAppID: _sdkAppID, userID: _userID, userSig: _userSig, loginUser: _loginInfo); } EmptyAvatarBuilder? _emptyAvatarBuilder; @@ -74,8 +73,7 @@ class CoreServicesImpl implements CoreServices { } setGlobalConfig(TIMUIKitConfig? config) { - final TUISelfInfoViewModel selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoViewModel = serviceLocator(); final TUISettingModel settingModel = serviceLocator(); selfInfoViewModel.globalConfig = config; settingModel.init(); @@ -185,14 +183,10 @@ class CoreServicesImpl implements CoreServices { } void addInitListener() { - final TUIFriendShipViewModel tuiFriendShipViewModel = - serviceLocator(); - final TUIConversationViewModel tuiConversationViewModel = - serviceLocator(); - final TUIChatGlobalModel tuiChatViewModel = - serviceLocator(); - final TUIGroupListenerModel tuiGroupListenerModel = - serviceLocator(); + final TUIFriendShipViewModel tuiFriendShipViewModel = serviceLocator(); + final TUIConversationViewModel tuiConversationViewModel = serviceLocator(); + final TUIChatGlobalModel tuiChatViewModel = serviceLocator(); + final TUIGroupListenerModel tuiGroupListenerModel = serviceLocator(); tuiFriendShipViewModel.addFriendListener(); tuiConversationViewModel.setConversationListener(); @@ -201,14 +195,10 @@ class CoreServicesImpl implements CoreServices { } void removeListener() { - final TUIFriendShipViewModel tuiFriendShipViewModel = - serviceLocator(); - final TUIConversationViewModel tuiConversationViewModel = - serviceLocator(); - final TUIChatGlobalModel tuiChatViewModel = - serviceLocator(); - final TUIGroupListenerModel tuiGroupListenerModel = - serviceLocator(); + final TUIFriendShipViewModel tuiFriendShipViewModel = serviceLocator(); + final TUIConversationViewModel tuiConversationViewModel = serviceLocator(); + final TUIChatGlobalModel tuiChatViewModel = serviceLocator(); + final TUIGroupListenerModel tuiGroupListenerModel = serviceLocator(); tuiFriendShipViewModel.removeFriendshipListener(); tuiConversationViewModel.removeConversationListener(); @@ -222,28 +212,22 @@ class CoreServicesImpl implements CoreServices { onCallback!(callbackValue); }); } else { - outputLogger.i( - "TUIKit Callback: ${callbackValue.type} - ${callbackValue.stackTrace}"); + outputLogger.i("TUIKit Callback: ${callbackValue.type} - ${callbackValue.stackTrace}"); } } initDataModel() { - final TUIFriendShipViewModel tuiFriendShipViewModel = - serviceLocator(); - final TUIConversationViewModel tuiConversationViewModel = - serviceLocator(); + final TUIFriendShipViewModel tuiFriendShipViewModel = serviceLocator(); + final TUIConversationViewModel tuiConversationViewModel = serviceLocator(); tuiFriendShipViewModel.initFriendShipModel(); tuiConversationViewModel.initConversation(); } clearData() { - final TUIFriendShipViewModel tuiFriendShipViewModel = - serviceLocator(); - final TUIConversationViewModel tuiConversationViewModel = - serviceLocator(); - final TUIChatGlobalModel tuiChatViewModel = - serviceLocator(); + final TUIFriendShipViewModel tuiFriendShipViewModel = serviceLocator(); + final TUIConversationViewModel tuiConversationViewModel = serviceLocator(); + final TUIChatGlobalModel tuiChatViewModel = serviceLocator(); tuiFriendShipViewModel.clearData(); tuiConversationViewModel.clearData(); @@ -252,19 +236,17 @@ class CoreServicesImpl implements CoreServices { updateUserStatusList(List newUserStatusList) { try { - final TUISelfInfoViewModel selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoViewModel = serviceLocator(); if (selfInfoViewModel.globalConfig?.isShowOnlineStatus == false) { return; } - final TUIFriendShipViewModel tuiFriendShipViewModel = - serviceLocator(); + final TUIFriendShipViewModel tuiFriendShipViewModel = serviceLocator(); final currentUserStatusList = tuiFriendShipViewModel.userStatusList; for (int i = 0; i < newUserStatusList.length; i++) { - final int indexInCurrentUserList = currentUserStatusList.indexWhere( - (element) => element.userID == newUserStatusList[i].userID); + final int indexInCurrentUserList = + currentUserStatusList.indexWhere((element) => element.userID == newUserStatusList[i].userID); if (indexInCurrentUserList == -1) { currentUserStatusList.add(newUserStatusList[i]); } else { @@ -284,16 +266,12 @@ class CoreServicesImpl implements CoreServices { }) async { _userID = userID; _userSig = userSig; - V2TimCallback result = await TencentImSDKPlugin.v2TIMManager - .login(userID: userID, userSig: userSig); + V2TimCallback result = await TencentImSDKPlugin.v2TIMManager.login(userID: userID, userSig: userSig); if (!PlatformUtils().isWeb) { didLoginSuccess(); } if (result.code != 0) { - callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorCode: result.code, - errorMsg: result.desc)); + callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorCode: result.code, errorMsg: result.desc)); } return result; } @@ -307,8 +285,7 @@ class CoreServicesImpl implements CoreServices { initDataModel(); if (TencentUtils.checkString(_userID) == null) { - V2TimValueCallback getLoginUserRes = - await TencentImSDKPlugin.v2TIMManager.getLoginUser(); + V2TimValueCallback getLoginUserRes = await TencentImSDKPlugin.v2TIMManager.getLoginUser(); if (getLoginUserRes.code == 0) { _userID = getLoginUserRes.data ?? ""; } @@ -326,18 +303,15 @@ class CoreServicesImpl implements CoreServices { if (res.code == 0 && res.data != null && res.data!.isNotEmpty && - res.data!.firstWhereOrNull((element) => element.userID == _userID) != - null) { + res.data!.firstWhereOrNull((element) => element.userID == _userID) != null) { success = true; } else { await Future.delayed(const Duration(seconds: 2)); } } - _loginInfo = - res?.data!.firstWhereOrNull((element) => element.userID == _userID); - final TUISelfInfoViewModel selfInfoViewModel = - serviceLocator(); + _loginInfo = res?.data!.firstWhereOrNull((element) => element.userID == _userID); + final TUISelfInfoViewModel selfInfoViewModel = serviceLocator(); if (_loginInfo != null) { selfInfoViewModel.setLoginInfo(_loginInfo); } @@ -389,9 +363,7 @@ class CoreServicesImpl implements CoreServices { bool isTPNSToken = false, int? businessID, }) { - return TencentImSDKPlugin.v2TIMManager - .getOfflinePushManager() - .setOfflinePushConfig( + return TencentImSDKPlugin.v2TIMManager.getOfflinePushManager().setOfflinePushConfig( businessID: businessID?.toDouble() ?? 0, token: token, isTPNSToken: isTPNSToken, @@ -402,8 +374,7 @@ class CoreServicesImpl implements CoreServices { Future setSelfInfo({ required V2TimUserFullInfo userFullInfo, }) { - return TencentImSDKPlugin.v2TIMManager - .setSelfInfo(userFullInfo: userFullInfo); + return TencentImSDKPlugin.v2TIMManager.setSelfInfo(userFullInfo: userFullInfo); } @override @@ -434,16 +405,11 @@ class CoreServicesImpl implements CoreServices { } @override - Future setOfflinePushStatus( - {required AppStatus status, int? totalCount}) { + Future setOfflinePushStatus({required AppStatus status, int? totalCount}) { if (status == AppStatus.foreground) { - return TencentImSDKPlugin.v2TIMManager - .getOfflinePushManager() - .doForeground(); + return TencentImSDKPlugin.v2TIMManager.getOfflinePushManager().doForeground(); } else { - return TencentImSDKPlugin.v2TIMManager - .getOfflinePushManager() - .doBackground(unreadCount: totalCount ?? 0); + return TencentImSDKPlugin.v2TIMManager.getOfflinePushManager().doBackground(unreadCount: totalCount ?? 0); } } diff --git a/lib/data_services/friendShip/friendship_services.dart b/lib/data_services/friendShip/friendship_services.dart index 2f17119..0bb182e 100644 --- a/lib/data_services/friendShip/friendship_services.dart +++ b/lib/data_services/friendShip/friendship_services.dart @@ -2,16 +2,26 @@ import 'package:tencent_cloud_chat_sdk/enum/V2TimFriendshipListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_application_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_response_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_type_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_check_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_application_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_check_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_check_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_operation_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; abstract class FriendshipServices { Future?> getFriendsInfo({ @@ -67,9 +77,7 @@ abstract class FriendshipServices { Future getFriendApplicationList(); Future acceptFriendApplication( - {required FriendResponseTypeEnum responseType, - required FriendApplicationTypeEnum type, - required String userID}); + {required FriendResponseTypeEnum responseType, required FriendApplicationTypeEnum type, required String userID}); Future refuseFriendApplication( {required FriendApplicationTypeEnum type, required String userID}); diff --git a/lib/data_services/friendShip/friendship_services_implements.dart b/lib/data_services/friendShip/friendship_services_implements.dart index 2faa598..2d22bf0 100644 --- a/lib/data_services/friendShip/friendship_services_implements.dart +++ b/lib/data_services/friendShip/friendship_services_implements.dart @@ -3,16 +3,26 @@ import 'package:tencent_cloud_chat_sdk/enum/V2TimFriendshipListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_application_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_response_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_type_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_check_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_application_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_check_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_check_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_operation_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart'; @@ -27,16 +37,12 @@ class FriendshipServicesImpl implements FriendshipServices { Future?> getFriendsInfo({ required List userIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .getFriendsInfo(userIDList: userIDList); + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().getFriendsInfo(userIDList: userIDList); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -45,15 +51,12 @@ class FriendshipServicesImpl implements FriendshipServices { Future?> getUsersInfo({ required List userIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getUsersInfo(userIDList: userIDList); + final res = await TencentImSDKPlugin.v2TIMManager.getUsersInfo(userIDList: userIDList); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -62,16 +65,12 @@ class FriendshipServicesImpl implements FriendshipServices { Future?> addToBlackList({ required List userIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .addToBlackList(userIDList: userIDList); + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().addToBlackList(userIDList: userIDList); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -85,15 +84,14 @@ class FriendshipServicesImpl implements FriendshipServices { String? addSource, String? addWording, }) async { - final result = - await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().addFriend( - userID: userID, - addType: addType, - remark: remark, - addWording: addWording, - friendGroup: friendGroup, - addSource: addSource, - ); + final result = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().addFriend( + userID: userID, + addType: addType, + remark: remark, + addWording: addWording, + friendGroup: friendGroup, + addSource: addSource, + ); if (result.code != 0) { _coreService.callOnCallback(TIMCallback( type: TIMCallbackType.API_ERROR, @@ -115,10 +113,10 @@ class FriendshipServicesImpl implements FriendshipServices { )); } else { _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code, - infoRecommendText: TIM_t("好友添加成功"), + type: TIMCallbackType.API_ERROR, + errorMsg: result.desc, + errorCode: result.code, + infoRecommendText: TIM_t("好友添加成功"), )); } @@ -129,16 +127,13 @@ class FriendshipServicesImpl implements FriendshipServices { Future?> deleteFromBlackList({ required List userIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .deleteFromBlackList(userIDList: userIDList); + final res = + await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().deleteFromBlackList(userIDList: userIDList); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -170,32 +165,24 @@ class FriendshipServicesImpl implements FriendshipServices { @override Future?> getFriendList() async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .getFriendList(); + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().getFriendList(); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @override Future?> getBlackList() async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .getBlackList(); + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().getBlackList(); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -211,10 +198,8 @@ class FriendshipServicesImpl implements FriendshipServices { if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -223,32 +208,24 @@ class FriendshipServicesImpl implements FriendshipServices { Future addFriendListener({ required V2TimFriendshipListener listener, }) { - return TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .addFriendListener(listener: listener); + return TencentImSDKPlugin.v2TIMManager.getFriendshipManager().addFriendListener(listener: listener); } @override Future removeFriendListener({ V2TimFriendshipListener? listener, }) { - return TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .removeFriendListener(listener: listener); + return TencentImSDKPlugin.v2TIMManager.getFriendshipManager().removeFriendListener(listener: listener); } @override Future getFriendApplicationList() async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .getFriendApplicationList(); + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().getFriendApplicationList(); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -259,9 +236,7 @@ class FriendshipServicesImpl implements FriendshipServices { required FriendApplicationTypeEnum type, required String userID, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .acceptFriendApplication( + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().acceptFriendApplication( responseType: responseType, type: type, userID: userID, @@ -269,10 +244,8 @@ class FriendshipServicesImpl implements FriendshipServices { if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -286,10 +259,8 @@ class FriendshipServicesImpl implements FriendshipServices { if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -302,15 +273,10 @@ class FriendshipServicesImpl implements FriendshipServices { }) async { final res = await TencentImSDKPlugin.v2TIMManager .getFriendshipManager() - .setFriendInfo( - friendRemark: friendRemark, - friendCustomInfo: friendCustomInfo, - userID: userID); + .setFriendInfo(friendRemark: friendRemark, friendCustomInfo: friendCustomInfo, userID: userID); if (res.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } return res; } @@ -319,16 +285,12 @@ class FriendshipServicesImpl implements FriendshipServices { Future?> searchFriends({ required V2TimFriendSearchParam searchParam, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getFriendshipManager() - .searchFriends(searchParam: searchParam); + final res = await TencentImSDKPlugin.v2TIMManager.getFriendshipManager().searchFriends(searchParam: searchParam); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -337,15 +299,12 @@ class FriendshipServicesImpl implements FriendshipServices { Future> getUserStatus({ required List userIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getUserStatus(userIDList: userIDList); + final res = await TencentImSDKPlugin.v2TIMManager.getUserStatus(userIDList: userIDList); if (res.code == 0) { return res.data ?? []; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return []; } } diff --git a/lib/data_services/group/group_services.dart b/lib/data_services/group/group_services.dart index 3e444a0..885781f 100644 --- a/lib/data_services/group/group_services.dart +++ b/lib/data_services/group/group_services.dart @@ -2,17 +2,28 @@ import 'package:tencent_cloud_chat_sdk/enum/V2TimGroupListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_application_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_filter_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_application_result.dart'; +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_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_info_result.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_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_info_result.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' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; abstract class GroupServices { Future?> getJoinedGroupList(); @@ -29,9 +40,8 @@ abstract class GroupServices { int offset = 0, }); - Future>> - getGroupMembersInfo( - {required String groupID, required List memberList}); + Future>> getGroupMembersInfo( + {required String groupID, required List memberList}); Future setGroupInfo({ required V2TimGroupInfo info, @@ -43,10 +53,7 @@ abstract class GroupServices { required GroupMemberRoleTypeEnum role, }); - getGroupMembersInfoThrottle( - {required String groupID, - required List memberList, - Function? callBack}); + getGroupMembersInfoThrottle({required String groupID, required List memberList, Function? callBack}); Future muteGroupMember({ required String groupID, @@ -67,8 +74,7 @@ abstract class GroupServices { String? reason, }); - Future>> - inviteUserToGroup({ + Future>> inviteUserToGroup({ required String groupID, required List userList, }); @@ -94,8 +100,7 @@ abstract class GroupServices { V2TimGroupListener? listener, }); - Future> - getGroupApplicationList(); + Future> getGroupApplicationList(); Future acceptGroupApplication({ required String groupID, diff --git a/lib/data_services/group/group_services_implement.dart b/lib/data_services/group/group_services_implement.dart index b55eca4..69d8503 100644 --- a/lib/data_services/group/group_services_implement.dart +++ b/lib/data_services/group/group_services_implement.dart @@ -2,17 +2,28 @@ import 'package:tencent_cloud_chat_sdk/enum/V2TimGroupListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_application_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_filter_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_application_result.dart'; +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_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_info_result.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_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_info_result.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' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/core_services_implements.dart'; @@ -46,16 +57,12 @@ class GroupServicesImpl extends GroupServices { @override Future?> getJoinedGroupList() async { - final res = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .getJoinedGroupList(); + final res = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getJoinedGroupList(); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @@ -64,25 +71,19 @@ class GroupServicesImpl extends GroupServices { Future?> getGroupsInfo({ required List groupIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .getGroupsInfo(groupIDList: groupIDList); + final res = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getGroupsInfo(groupIDList: groupIDList); if (res.code == 0) { return res.data; } else { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } } @override void getGroupMembersInfoThrottle( - {required String groupID, - required List memberList, - Function? callBack}) async { + {required String groupID, required List memberList, Function? callBack}) async { if (callBack != null) { groupInfoCallBackList.add(callBack); throttleGetGroupInfo({"groupID": groupID, "memberList": memberList}); @@ -90,17 +91,14 @@ class GroupServicesImpl extends GroupServices { } @override - Future>> - getGroupMembersInfo( - {required String groupID, required List memberList}) async { + Future>> getGroupMembersInfo( + {required String groupID, required List memberList}) async { final res = await TencentImSDKPlugin.v2TIMManager .getGroupManager() .getGroupMembersInfo(groupID: groupID, memberList: memberList); if (res.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } return res; } @@ -115,17 +113,10 @@ class GroupServicesImpl extends GroupServices { }) async { final res = await TencentImSDKPlugin.v2TIMManager .getGroupManager() - .getGroupMemberList( - groupID: groupID, - filter: filter, - nextSeq: nextSeq, - count: count, - offset: offset); + .getGroupMemberList(groupID: groupID, filter: filter, nextSeq: nextSeq, count: count, offset: offset); if (res.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } return res; } @@ -134,14 +125,10 @@ class GroupServicesImpl extends GroupServices { Future setGroupInfo({ required V2TimGroupInfo info, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .setGroupInfo(info: info); + final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().setGroupInfo(info: info); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -156,10 +143,8 @@ class GroupServicesImpl extends GroupServices { .getGroupManager() .setGroupMemberRole(groupID: groupID, userID: userID, role: role); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -174,10 +159,8 @@ class GroupServicesImpl extends GroupServices { .getGroupManager() .muteGroupMember(groupID: groupID, userID: userID, seconds: seconds); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -191,16 +174,10 @@ class GroupServicesImpl extends GroupServices { }) async { final result = await TencentImSDKPlugin.v2TIMManager .getGroupManager() - .setGroupMemberInfo( - groupID: groupID, - userID: userID, - nameCard: nameCard, - customInfo: customInfo); + .setGroupMemberInfo(groupID: groupID, userID: userID, nameCard: nameCard, customInfo: customInfo); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -213,31 +190,24 @@ class GroupServicesImpl extends GroupServices { }) async { final result = await TencentImSDKPlugin.v2TIMManager .getGroupManager() - .kickGroupMember( - groupID: groupID, memberList: memberList, reason: reason); + .kickGroupMember(groupID: groupID, memberList: memberList, reason: reason); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override - Future>> - inviteUserToGroup({ + Future>> inviteUserToGroup({ required String groupID, required List userList, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .inviteUserToGroup(groupID: groupID, userList: userList); + final result = + await TencentImSDKPlugin.v2TIMManager.getGroupManager().inviteUserToGroup(groupID: groupID, userList: userList); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -246,14 +216,10 @@ class GroupServicesImpl extends GroupServices { Future>> searchGroups({ required V2TimGroupSearchParam searchParam, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .searchGroups(searchParam: searchParam); + final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().searchGroups(searchParam: searchParam); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -263,8 +229,7 @@ class GroupServicesImpl extends GroupServices { required String groupID, required String message, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .joinGroup(groupID: groupID, message: message); + final result = await TencentImSDKPlugin.v2TIMManager.joinGroup(groupID: groupID, message: message); if (result.code != 0) { String recommendText = ErrorMessageConverter.getErrorMessage(result.code); _coreService.callOnCallback(TIMCallback( @@ -280,14 +245,10 @@ class GroupServicesImpl extends GroupServices { Future> searchGroupMembers({ required V2TimGroupMemberSearchParam searchParam, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .searchGroupMembers(param: searchParam); + final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().searchGroupMembers(param: searchParam); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -296,8 +257,7 @@ class GroupServicesImpl extends GroupServices { Future addGroupListener({ required V2TimGroupListener listener, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .addGroupListener(listener: listener); + final result = await TencentImSDKPlugin.v2TIMManager.addGroupListener(listener: listener); return result; } @@ -305,22 +265,16 @@ class GroupServicesImpl extends GroupServices { Future removeGroupListener({ V2TimGroupListener? listener, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .removeGroupListener(listener: listener); + final result = await TencentImSDKPlugin.v2TIMManager.removeGroupListener(listener: listener); return result; } @override - Future> - getGroupApplicationList() async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .getGroupApplicationList(); + Future> getGroupApplicationList() async { + final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getGroupApplicationList(); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -333,9 +287,7 @@ class GroupServicesImpl extends GroupServices { required int type, required int addTime, String? reason}) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .acceptGroupApplication( + final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().acceptGroupApplication( groupID: groupID, fromUser: fromUser, toUser: toUser, @@ -344,10 +296,8 @@ class GroupServicesImpl extends GroupServices { reason: reason ?? "", ); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -360,20 +310,11 @@ class GroupServicesImpl extends GroupServices { required String fromUser, required String toUser, required GroupApplicationTypeEnum type}) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getGroupManager() - .refuseGroupApplication( - groupID: groupID, - fromUser: fromUser, - toUser: toUser, - type: type, - addTime: addTime, - reason: reason); + final result = await TencentImSDKPlugin.v2TIMManager.getGroupManager().refuseGroupApplication( + groupID: groupID, fromUser: fromUser, toUser: toUser, type: type, addTime: addTime, reason: reason); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } diff --git a/lib/data_services/message/message_service_implement.dart b/lib/data_services/message/message_service_implement.dart index 64f32d9..48d226a 100644 --- a/lib/data_services/message/message_service_implement.dart +++ b/lib/data_services/message/message_service_implement.dart @@ -10,17 +10,28 @@ import 'package:tencent_cloud_chat_sdk/enum/history_msg_get_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; import 'package:tencent_cloud_chat_sdk/enum/receive_message_opt_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_message_read_member_list.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_list_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_online_url.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.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' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_change_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_list_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_list_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_online_url.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_online_url.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_receipt.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_msg_create_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_conversation_view_model.dart'; @@ -37,8 +48,7 @@ class MessageServiceImpl extends MessageService { @override Future getHistoryMessageListV2({ - HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq = -1, @@ -47,16 +57,14 @@ class MessageServiceImpl extends MessageService { List? messageTypeList, }) async { bool haveMoreData = true; - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .getHistoryMessageList( - count: count, - getType: getType, - userID: userID, - groupID: groupID, - lastMsgID: lastMsgID, - lastMsgSeq: lastMsgSeq, - messageTypeList: messageTypeList); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList( + count: count, + getType: getType, + userID: userID, + groupID: groupID, + lastMsgID: lastMsgID, + lastMsgSeq: lastMsgSeq, + messageTypeList: messageTypeList); final List responseMessageList = res.data ?? []; final conversationID = userID ?? groupID; final cachedMessageList = messageListMap[conversationID]; @@ -66,41 +74,33 @@ class MessageServiceImpl extends MessageService { combinedMessageList = [...cachedMessageList, ...responseMessageList]; // 首次加载 } else { - final bool existSendingMessage = sendingMessage[conversationID] != null && - sendingMessage[conversationID]!.isNotEmpty; + final bool existSendingMessage = + sendingMessage[conversationID] != null && sendingMessage[conversationID]!.isNotEmpty; // 存在未发送完成的消息 if (existSendingMessage) { - combinedMessageList = [ - ...sendingMessage[conversationID]!, - ...responseMessageList - ]; + combinedMessageList = [...sendingMessage[conversationID]!, ...responseMessageList]; } else { sendingMessage.remove(conversationID); combinedMessageList = responseMessageList; } } if (res.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } if (responseMessageList.isEmpty || (!PlatformUtils().isWeb && responseMessageList.length < count) || - (PlatformUtils().isWeb && - responseMessageList.length < min(count, 20))) { + (PlatformUtils().isWeb && responseMessageList.length < min(count, 20))) { haveMoreData = false; } else { haveMoreData = true; } - return MessageListResponse( - haveMoreData: haveMoreData, data: combinedMessageList); + return MessageListResponse(haveMoreData: haveMoreData, data: combinedMessageList); } @override Future> getHistoryMessageList({ - HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq = -1, @@ -108,30 +108,25 @@ class MessageServiceImpl extends MessageService { String? lastMsgID, List? messageTypeList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .getHistoryMessageList( - count: count, - getType: getType, - userID: userID, - groupID: groupID, - lastMsgID: lastMsgID, - lastMsgSeq: lastMsgSeq, - messageTypeList: messageTypeList); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageList( + count: count, + getType: getType, + userID: userID, + groupID: groupID, + lastMsgID: lastMsgID, + lastMsgSeq: lastMsgSeq, + messageTypeList: messageTypeList); final reponseMessageList = res.data ?? []; if (res.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } return reponseMessageList; } @override Future getHistoryMessageListWithComplete({ - HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq = 0, @@ -139,22 +134,18 @@ class MessageServiceImpl extends MessageService { String? lastMsgID, List? messageTypeList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .getHistoryMessageListV2( - count: count, - getType: getType, - userID: userID, - groupID: groupID, - lastMsgID: lastMsgID, - lastMsgSeq: lastMsgSeq, - messageTypeList: messageTypeList); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getHistoryMessageListV2( + count: count, + getType: getType, + userID: userID, + groupID: groupID, + lastMsgID: lastMsgID, + lastMsgSeq: lastMsgSeq, + messageTypeList: messageTypeList); final responseMessageList = res.data; if (res.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); } return responseMessageList; } @@ -163,28 +154,23 @@ class MessageServiceImpl extends MessageService { Future addSimpleMsgListener({ required V2TimSimpleMsgListener listener, }) async { - return TencentImSDKPlugin.v2TIMManager - .addSimpleMsgListener(listener: listener); + return TencentImSDKPlugin.v2TIMManager.addSimpleMsgListener(listener: listener); } @override Future removeSimpleMsgListener({V2TimSimpleMsgListener? listener}) { - return TencentImSDKPlugin.v2TIMManager - .removeSimpleMsgListener(listener: listener); + return TencentImSDKPlugin.v2TIMManager.removeSimpleMsgListener(listener: listener); } @override Future addAdvancedMsgListener({ required V2TimAdvancedMsgListener listener, }) { - return TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .addAdvancedMsgListener(listener: listener); + return TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: listener); } @override - Future> - getGroupMessageReadMemberList({ + Future> getGroupMessageReadMemberList({ required String messageID, required GetGroupMessageReadMemberListFilter filter, int nextSeq = 0, @@ -192,16 +178,10 @@ class MessageServiceImpl extends MessageService { }) async { final result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .getGroupMessageReadMemberList( - messageID: messageID, - filter: filter, - nextSeq: nextSeq, - count: count); + .getGroupMessageReadMemberList(messageID: messageID, filter: filter, nextSeq: nextSeq, count: count); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -210,14 +190,11 @@ class MessageServiceImpl extends MessageService { Future>> getMessageReadReceipts({ required List messageIDList, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .getMessageReadReceipts(messageIDList: messageIDList); + final result = + await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageReadReceipts(messageIDList: messageIDList); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -226,78 +203,53 @@ class MessageServiceImpl extends MessageService { Future sendMessageReadReceipts({ required List messageIDList, }) async { - return _retryMarkMessageAsRead(action: (){ - return TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .sendMessageReadReceipts(messageIDList: messageIDList); + return _retryMarkMessageAsRead(action: () { + return TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessageReadReceipts(messageIDList: messageIDList); }); } @override - Future createTextMessage( - {required String text}) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .createTextMessage(text: text); + Future createTextMessage({required String text}) async { + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createTextMessage(text: text); if (res.code == 0) { final messageResult = res.data; return messageResult; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override - Future createCustomMessage( - {required String data}) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .createCustomMessage(data: data); + Future createCustomMessage({required String data}) async { + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createCustomMessage(data: data); if (res.code == 0) { final messageResult = res.data; return messageResult; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override - Future createFaceMessage( - {required int index, required String data}) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .createFaceMessage(index: index, data: data); + Future createFaceMessage({required int index, required String data}) async { + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createFaceMessage(index: index, data: data); if (res.code == 0) { final messageResult = res.data; return messageResult; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override - Future> reSendMessage( - {required String msgID, - bool? onlineUserOnly}) async { + Future> reSendMessage({required String msgID, bool? onlineUserOnly}) async { final res = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .reSendMessage(msgID: msgID, onlineUserOnly: onlineUserOnly ?? false); if (res.code != 0) { String recommendText = ErrorMessageConverter.getErrorMessage(res.code); _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code, - infoRecommendText: recommendText)); + type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code, infoRecommendText: recommendText)); } return res; } @@ -312,10 +264,7 @@ class MessageServiceImpl extends MessageService { final messageResult = res.data; return messageResult; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @@ -324,17 +273,11 @@ class MessageServiceImpl extends MessageService { {String? imageName, String? imagePath, dynamic inputElement}) async { final res = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .createImageMessage( - imageName: imageName, - imagePath: imagePath ?? "", - inputElement: inputElement); + .createImageMessage(imageName: imageName, imagePath: imagePath ?? "", inputElement: inputElement); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @@ -349,10 +292,7 @@ class MessageServiceImpl extends MessageService { if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @@ -370,19 +310,18 @@ class MessageServiceImpl extends MessageService { String? localCustomData, bool isExcludedFromContentModeration = false, }) async { - final result = - await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage( - id: id, - receiver: receiver, - groupID: groupID, - priority: priority, - onlineUserOnly: onlineUserOnly, - offlinePushInfo: offlinePushInfo, - needReadReceipt: needReadReceipt, - localCustomData: localCustomData, - cloudCustomData: cloudCustomData, - isExcludedFromContentModeration: isExcludedFromContentModeration, - ); + final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendMessage( + id: id, + receiver: receiver, + groupID: groupID, + priority: priority, + onlineUserOnly: onlineUserOnly, + offlinePushInfo: offlinePushInfo, + needReadReceipt: needReadReceipt, + localCustomData: localCustomData, + cloudCustomData: cloudCustomData, + isExcludedFromContentModeration: isExcludedFromContentModeration, + ); if (result.code != 0) { String recommendText = ErrorMessageConverter.getErrorMessage(result.code); _coreService.callOnCallback(TIMCallback( @@ -403,34 +342,26 @@ class MessageServiceImpl extends MessageService { if (kIsWeb) { result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .deleteMessages( - msgIDs: [], webMessageInstanceList: [webMessageInstance]); + .deleteMessages(msgIDs: [], webMessageInstanceList: [webMessageInstance]); } else { - result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .deleteMessageFromLocalStorage(msgID: msgID); + result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().deleteMessageFromLocalStorage(msgID: msgID); } if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override - Future revokeMessage( - {required String msgID, Object? webMessageInstance}) async { + Future revokeMessage({required String msgID, Object? webMessageInstance}) async { final result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .revokeMessage(msgID: msgID, webMessageInstatnce: webMessageInstance); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -439,14 +370,10 @@ class MessageServiceImpl extends MessageService { Future clearC2CHistoryMessage({ required String userID, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .clearC2CHistoryMessage(userID: userID); + final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().clearC2CHistoryMessage(userID: userID); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -455,14 +382,10 @@ class MessageServiceImpl extends MessageService { Future clearGroupHistoryMessage({ required String groupID, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .clearGroupHistoryMessage(groupID: groupID); + final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().clearGroupHistoryMessage(groupID: groupID); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -482,10 +405,8 @@ class MessageServiceImpl extends MessageService { await Future.delayed(const Duration(milliseconds: 500)); } while (attempts < retries); - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); return result; } @@ -495,13 +416,11 @@ class MessageServiceImpl extends MessageService { required String userID, }) { return _retryMarkMessageAsRead(action: () { - return TencentImSDKPlugin.v2TIMManager - .getConversationManager() - .cleanConversationUnreadMessageCount( - conversationID: "${TUIConversationViewModel.conversationC2CPrefix}$userID", - cleanTimestamp: 0, - cleanSequence: 0, - ); + return TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( + conversationID: "${TUIConversationViewModel.conversationC2CPrefix}$userID", + cleanTimestamp: 0, + cleanSequence: 0, + ); }); } @@ -510,22 +429,18 @@ class MessageServiceImpl extends MessageService { required String groupID, }) { return _retryMarkMessageAsRead(action: () { - return TencentImSDKPlugin.v2TIMManager - .getConversationManager() - .cleanConversationUnreadMessageCount( - conversationID: "${TUIConversationViewModel.conversationGroupPrefix}$groupID", - cleanTimestamp: 0, - cleanSequence: 0, - ); + return TencentImSDKPlugin.v2TIMManager.getConversationManager().cleanConversationUnreadMessageCount( + conversationID: "${TUIConversationViewModel.conversationGroupPrefix}$groupID", + cleanTimestamp: 0, + cleanSequence: 0, + ); }); } @override - Future removeAdvancedMsgListener( - {V2TimAdvancedMsgListener? listener}) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .removeAdvancedMsgListener(listener: listener); + Future removeAdvancedMsgListener({V2TimAdvancedMsgListener? listener}) async { + final result = + await TencentImSDKPlugin.v2TIMManager.getMessageManager().removeAdvancedMsgListener(listener: listener); return result; } @@ -533,16 +448,11 @@ class MessageServiceImpl extends MessageService { Future?> downloadMergerMessage({ required String msgID, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .downloadMergerMessage(msgID: msgID); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().downloadMergerMessage(msgID: msgID); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @@ -550,16 +460,11 @@ class MessageServiceImpl extends MessageService { Future createForwardMessage({ required String msgID, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .createForwardMessage(msgID: msgID); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createForwardMessage(msgID: msgID); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @@ -570,62 +475,40 @@ class MessageServiceImpl extends MessageService { required List abstractList, required String compatibleText, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .createMergerMessage( - msgIDList: msgIDList, - title: title, - abstractList: abstractList, - compatibleText: compatibleText); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createMergerMessage( + msgIDList: msgIDList, title: title, abstractList: abstractList, compatibleText: compatibleText); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override - Future deleteMessages( - {required List msgIDs, - List? webMessageInstanceList}) async { + Future deleteMessages({required List msgIDs, List? webMessageInstanceList}) async { final result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .deleteMessages( - msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList); + .deleteMessages(msgIDs: msgIDs, webMessageInstanceList: webMessageInstanceList); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override Future createVideoMessage( - {String? videoPath, - String? type, - int? duration, - String? snapshotPath, - dynamic inputElement}) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .createVideoMessage( - videoFilePath: videoPath ?? "", - type: type ?? "", - duration: duration ?? 1, - snapshotPath: snapshotPath ?? "", - inputElement: inputElement); + {String? videoPath, String? type, int? duration, String? snapshotPath, dynamic inputElement}) async { + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().createVideoMessage( + videoFilePath: videoPath ?? "", + type: type ?? "", + duration: duration ?? 1, + snapshotPath: snapshotPath ?? "", + inputElement: inputElement); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @@ -638,75 +521,54 @@ class MessageServiceImpl extends MessageService { bool needReadReceipt = false, required V2TimMessage replyMessage, // 被回复的消息 }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .sendReplyMessage( - id: id, - receiver: receiver, - offlinePushInfo: offlinePushInfo, - groupID: groupID, - needReadReceipt: needReadReceipt, - replyMessage: replyMessage); + final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().sendReplyMessage( + id: id, + receiver: receiver, + offlinePushInfo: offlinePushInfo, + groupID: groupID, + needReadReceipt: needReadReceipt, + replyMessage: replyMessage); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override Future createFileMessage( - {String? filePath, - required String fileName, - dynamic inputElement}) async { + {String? filePath, required String fileName, dynamic inputElement}) async { final res = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .createFileMessage( - filePath: filePath ?? "", - fileName: fileName, - inputElement: inputElement); + .createFileMessage(filePath: filePath ?? "", fileName: fileName, inputElement: inputElement); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override Future createLocationMessage( - {required String desc, - required double longitude, - required double latitude}) async { + {required String desc, required double longitude, required double latitude}) async { final res = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .createLocationMessage( - desc: desc, longitude: longitude, latitude: latitude); + .createLocationMessage(desc: desc, longitude: longitude, latitude: latitude); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override Future> searchLocalMessages( {required V2TimMessageSearchParam searchParam}) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .searchLocalMessages(searchParam: searchParam); + final result = + await TencentImSDKPlugin.v2TIMManager.getMessageManager().searchLocalMessages(searchParam: searchParam); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -715,30 +577,22 @@ class MessageServiceImpl extends MessageService { Future?> findMessages({ required List messageIDList, }) async { - final res = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .findMessages(messageIDList: messageIDList); + final res = await TencentImSDKPlugin.v2TIMManager.getMessageManager().findMessages(messageIDList: messageIDList); if (res.code == 0) { return res.data; } - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: res.desc, - errorCode: res.code)); + _coreService.callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: res.desc, errorCode: res.code)); return null; } @override - Future setLocalCustomInt( - {required String msgID, required int localCustomInt}) async { + Future setLocalCustomInt({required String msgID, required int localCustomInt}) async { final result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .setLocalCustomInt(msgID: msgID, localCustomInt: localCustomInt); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -752,10 +606,8 @@ class MessageServiceImpl extends MessageService { .getMessageManager() .setC2CReceiveMessageOpt(userIDList: userIDList, opt: opt); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @@ -765,96 +617,68 @@ class MessageServiceImpl extends MessageService { required String groupID, required ReceiveMsgOptEnum opt, }) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .setGroupReceiveMessageOpt(groupID: groupID, opt: opt); + final result = + await TencentImSDKPlugin.v2TIMManager.getMessageManager().setGroupReceiveMessageOpt(groupID: groupID, opt: opt); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override - Future> modifyMessage( - {required V2TimMessage message}) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .modifyMessage(message: message); + Future> modifyMessage({required V2TimMessage message}) async { + final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().modifyMessage(message: message); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override - Future setLocalCustomData( - {required String msgID, required String localCustomData}) async { + Future setLocalCustomData({required String msgID, required String localCustomData}) async { final result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() .setLocalCustomData(msgID: msgID, localCustomData: localCustomData); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override - Future> getMessageOnlineUrl( - {required String msgID}) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .getMessageOnlineUrl(msgID: msgID); + Future> getMessageOnlineUrl({required String msgID}) async { + final result = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: msgID); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override Future downloadMessage( - {required String msgID, - required int messageType, - required int imageType, - required bool isSnapshot}) async { + {required String msgID, required int messageType, required int imageType, required bool isSnapshot}) async { final result = await TencentImSDKPlugin.v2TIMManager .getMessageManager() - .downloadMessage( - msgID: msgID, - messageType: messageType, - imageType: imageType, - isSnapshot: isSnapshot); + .downloadMessage(msgID: msgID, messageType: messageType, imageType: imageType, isSnapshot: isSnapshot); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result; } @override Future translateText(String text, String target) async { - final result = await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .translateText(texts: [text], targetLanguage: target); + final result = + await TencentImSDKPlugin.v2TIMManager.getMessageManager().translateText(texts: [text], targetLanguage: target); if (result.code != 0) { - _coreService.callOnCallback(TIMCallback( - type: TIMCallbackType.API_ERROR, - errorMsg: result.desc, - errorCode: result.code)); + _coreService + .callOnCallback(TIMCallback(type: TIMCallbackType.API_ERROR, errorMsg: result.desc, errorCode: result.code)); } return result.data?[text] ?? ""; } diff --git a/lib/data_services/message/message_services.dart b/lib/data_services/message/message_services.dart index 9c4c959..b138fbf 100644 --- a/lib/data_services/message/message_services.dart +++ b/lib/data_services/message/message_services.dart @@ -5,17 +5,28 @@ import 'package:tencent_cloud_chat_sdk/enum/history_msg_get_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; import 'package:tencent_cloud_chat_sdk/enum/receive_message_opt_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_message_read_member_list.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_list_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_online_url.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.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' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_change_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_list_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_list_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_online_url.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_online_url.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_receipt.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_msg_create_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_msg_create_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; class MessageListResponse { final bool haveMoreData; @@ -26,8 +37,7 @@ class MessageListResponse { abstract class MessageService { Future> getHistoryMessageList({ - HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq, @@ -37,8 +47,7 @@ abstract class MessageService { }); Future getHistoryMessageListWithComplete({ - HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq, @@ -48,8 +57,7 @@ abstract class MessageService { }); Future getHistoryMessageListV2({ - HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, + HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_LOCAL_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq, @@ -70,13 +78,11 @@ abstract class MessageService { Future createTextMessage({required String text}); - Future createFaceMessage( - {required int index, required String data}); + Future createFaceMessage({required int index, required String data}); Future createCustomMessage({required String data}); - Future createTextAtMessage( - {required String text, required List atUserList}); + Future createTextAtMessage({required String text, required List atUserList}); Future> sendMessage( {required String id, // 自己创建的ID @@ -100,30 +106,20 @@ abstract class MessageService { required V2TimMessage replyMessage, // 被回复的消息 }); - Future> reSendMessage( - {required String msgID, - bool onlineUserOnly}); + Future> reSendMessage({required String msgID, bool onlineUserOnly}); - Future> modifyMessage( - {required V2TimMessage message}); + Future> modifyMessage({required V2TimMessage message}); - Future createImageMessage( - {String? imageName, String? imagePath, dynamic inputElement}); + Future createImageMessage({String? imageName, String? imagePath, dynamic inputElement}); Future createVideoMessage( - {String? videoPath = "", - String? type = "", - int? duration = 0, - String? snapshotPath = "", - dynamic inputElement}); + {String? videoPath = "", String? type = "", int? duration = 0, String? snapshotPath = "", dynamic inputElement}); Future createFileMessage( {String? filePath, required String fileName, dynamic inputElement}); Future createLocationMessage( - {required String desc, - required double longitude, - required double latitude}); + {required String desc, required double longitude, required double latitude}); Future createSoundMessage({ required String soundPath, @@ -146,8 +142,7 @@ abstract class MessageService { Object? webMessageInstance, }); - Future revokeMessage( - {required String msgID, Object? webMessageInstance}); + Future revokeMessage({required String msgID, Object? webMessageInstance}); Future clearC2CHistoryMessage({ required String userID, @@ -171,8 +166,7 @@ abstract class MessageService { required String msgID, }); - Future deleteMessages( - {required List msgIDs, List? webMessageInstanceList}); + Future deleteMessages({required List msgIDs, List? webMessageInstanceList}); Future?> findMessages({ required List messageIDList, @@ -182,11 +176,9 @@ abstract class MessageService { required V2TimMessageSearchParam searchParam, }); - Future setLocalCustomInt( - {required String msgID, required int localCustomInt}); + Future setLocalCustomInt({required String msgID, required int localCustomInt}); - Future setLocalCustomData( - {required String msgID, required String localCustomData}); + Future setLocalCustomData({required String msgID, required String localCustomData}); Future setC2CReceiveMessageOpt({ required List userIDList, @@ -198,8 +190,7 @@ abstract class MessageService { required ReceiveMsgOptEnum opt, }); - Future> - getGroupMessageReadMemberList({ + Future> getGroupMessageReadMemberList({ required String messageID, required GetGroupMessageReadMemberListFilter filter, int nextSeq = 0, diff --git a/lib/ui/controller/tim_uikit_chat_controller.dart b/lib/ui/controller/tim_uikit_chat_controller.dart index a2fd67c..df905b6 100644 --- a/lib/ui/controller/tim_uikit_chat_controller.dart +++ b/lib/ui/controller/tim_uikit_chat_controller.dart @@ -5,10 +5,14 @@ import 'package:scroll_to_index/scroll_to_index.dart'; import 'package:tencent_cloud_chat_sdk/enum/history_msg_get_type_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_priority_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; @@ -18,8 +22,7 @@ class TIMUIKitChatController { late TUIChatSeparateViewModel? model; late TIMUIKitInputTextFieldController? textFieldController; late AutoScrollController? scrollController; - final TUIChatGlobalModel globalChatModel = - serviceLocator(); + final TUIChatGlobalModel globalChatModel = serviceLocator(); TIMUIKitChatController({TUIChatSeparateViewModel? viewModel}) { if (viewModel != null) { @@ -28,8 +31,7 @@ class TIMUIKitChatController { } Future loadHistoryMessageList( - {HistoryMsgGetTypeEnum getType = - HistoryMsgGetTypeEnum.V2TIM_GET_CLOUD_OLDER_MSG, + {HistoryMsgGetTypeEnum getType = HistoryMsgGetTypeEnum.V2TIM_GET_CLOUD_OLDER_MSG, String? userID, String? groupID, int lastMsgSeq = -1, @@ -59,16 +61,15 @@ class TIMUIKitChatController { } /// Refresh the history message list manually; - Future refreshCurrentHistoryList( - [String? convID, ConvType? convType]) async { - if(model != null){ - try{ + Future refreshCurrentHistoryList([String? convID, ConvType? convType]) async { + if (model != null) { + try { scrollController?.animateTo( scrollController!.position.minScrollExtent, duration: const Duration(milliseconds: 200), curve: Curves.ease, ); - }catch(e){} + } catch (e) {} return model!.loadDataFromController(); } else { return false; @@ -150,13 +151,13 @@ class TIMUIKitChatController { assert(groupID != null || convType != ConvType.group); assert(userID != null || convType != ConvType.c2c); if (isNavigateToMessageListBottom && scrollController != null) { - try{ + try { scrollController?.animateTo( scrollController!.position.minScrollExtent, duration: const Duration(milliseconds: 200), curve: Curves.ease, ); - }catch(e){} + } catch (e) {} } return globalChatModel.sendMessageFromController( priority: priority, @@ -173,13 +174,13 @@ class TIMUIKitChatController { } else if (model != null) { /// Sends a message to the current conversation specified on `TIMUIKitChat`. 发送到 `TIMUIKitChat` 中指定的当前对话。 if (isNavigateToMessageListBottom && scrollController != null) { - try{ + try { scrollController?.animateTo( scrollController!.position.minScrollExtent, duration: const Duration(milliseconds: 200), curve: Curves.ease, ); - }catch(e){} + } catch (e) {} } return model!.sendMessageFromController( priority: priority, @@ -245,13 +246,13 @@ class TIMUIKitChatController { assert(groupID != null || convType != ConvType.group); assert(userID != null || convType != ConvType.c2c); if (isNavigateToMessageListBottom && scrollController != null) { - try{ + try { scrollController?.animateTo( scrollController!.position.minScrollExtent, duration: const Duration(milliseconds: 200), curve: Curves.ease, ); - }catch(e){} + } catch (e) {} } return globalChatModel.sendReplyMessageFromController( text: messageText, @@ -307,34 +308,27 @@ class TIMUIKitChatController { required BuildContext context, }) async { return model?.sendMergerMessage( - conversationList: conversationList, - title: title, - abstractList: abstractList, - context: context); + conversationList: conversationList, title: title, abstractList: abstractList, context: context); } /// Set local custom data; returns the bool shows if succeed. /// Please provide `convID`, if you use `TIMUIKitChatController` without specifying to a `TIMUIKitChat`. - Future setLocalCustomData(String msgID, String localCustomData, - [String? convID]) async { + Future setLocalCustomData(String msgID, String localCustomData, [String? convID]) async { final String? conversationID = convID ?? model?.conversationID; if (conversationID == null) { return false; } - return globalChatModel.setLocalCustomData( - msgID, localCustomData, conversationID); + return globalChatModel.setLocalCustomData(msgID, localCustomData, conversationID); } /// Set local custom int; returns the bool shows if succeed. /// Please provide `convID`, if you use `TIMUIKitChatController` without specifying to a `TIMUIKitChat`. - Future setLocalCustomInt(String msgID, int localCustomInt, - [String? convID]) async { + Future setLocalCustomInt(String msgID, int localCustomInt, [String? convID]) async { final String? conversationID = convID ?? model?.conversationID; if (conversationID == null) { return false; } - return globalChatModel.setLocalCustomInt( - msgID, localCustomInt, conversationID); + return globalChatModel.setLocalCustomInt(msgID, localCustomInt, conversationID); } /// Get current conversation, returns UserID or GroupID if in the chat page, returns "" if not. @@ -350,8 +344,7 @@ class TIMUIKitChatController { /// Mention or @ other members in a group manually. /// This function solely works when `TIMUIKitChatController` is specified for use within a `TIMUIKitChat`. - void mentionOtherMemberInGroup( - {required String showNameInMessage, required String userID}) { + void mentionOtherMemberInGroup({required String showNameInMessage, required String userID}) { textFieldController?.longPressToAt(showNameInMessage, userID); } @@ -371,9 +364,7 @@ class TIMUIKitChatController { /// This function solely works when `TIMUIKitChatController` is specified for use within a `TIMUIKitChat`. List getGroupMemberList({String? keyword}) { final List memberList = - (model?.groupMemberList ?? []) - .whereType() - .toList(); + (model?.groupMemberList ?? []).whereType().toList(); return TencentUtils.checkString(keyword) == null ? memberList @@ -381,9 +372,7 @@ class TIMUIKitChatController { final userID = e.userID; final nickName = e.nickName ?? ""; final friendRemark = e.friendRemark ?? ""; - return userID.contains(keyword!) || - nickName.contains(keyword) || - friendRemark.contains(keyword); + return userID.contains(keyword!) || nickName.contains(keyword) || friendRemark.contains(keyword); }).toList(); } } diff --git a/lib/ui/controller/tim_uikit_conversation_controller.dart b/lib/ui/controller/tim_uikit_conversation_controller.dart index 95ea0a7..4608361 100644 --- a/lib/ui/controller/tim_uikit_conversation_controller.dart +++ b/lib/ui/controller/tim_uikit_conversation_controller.dart @@ -1,5 +1,7 @@ -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_conversation_view_model.dart'; class TIMUIKitConversationController { @@ -36,22 +38,17 @@ class TIMUIKitConversationController { } /// Pin one conversation to the top - Future pinConversation( - {required String conversationID, required bool isPinned}) { - return model.pinConversation( - conversationID: conversationID, isPinned: isPinned); + Future pinConversation({required String conversationID, required bool isPinned}) { + return model.pinConversation(conversationID: conversationID, isPinned: isPinned); } /// Set the draft for a conversation - Future setConversationDraft( - {required String conversationID, String? draftText}) { - return model.setConversationDraft( - conversationID: conversationID, draftText: draftText); + Future setConversationDraft({required String conversationID, String? draftText}) { + return model.setConversationDraft(conversationID: conversationID, draftText: draftText); } /// Clear the historical message in a specific conversation - Future? clearHistoryMessage( - {required V2TimConversation conversation}) { + Future? clearHistoryMessage({required V2TimConversation conversation}) { final convType = conversation.type; final convID = convType == 1 ? conversation.userID : conversation.groupID; if (convType != null && convID != null) { @@ -72,7 +69,7 @@ class TIMUIKitConversationController { /// Scroll to a specific conversation, this conversation must be existed in conversation list. /// If not exist, invoking `loadData` recursively, until find the target conversation. - scrollToConversation(String conversationID){ + scrollToConversation(String conversationID) { model.scrollToConversation = conversationID; } } diff --git a/lib/ui/controller/tim_uikit_profile_controller.dart b/lib/ui/controller/tim_uikit_profile_controller.dart index e313d9b..f3122d9 100644 --- a/lib/ui/controller/tim_uikit_profile_controller.dart +++ b/lib/ui/controller/tim_uikit_profile_controller.dart @@ -1,7 +1,10 @@ import 'package:flutter/cupertino.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_operation_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_operation_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_profile_view_model.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/text_input_bottom_sheet.dart'; @@ -27,8 +30,7 @@ class TIMUIKitProfileController { } /// add a user to block list - Future?> addUserToBlackList( - bool shouldAdd, String userID) { + Future?> addUserToBlackList(bool shouldAdd, String userID) { return model.addToBlackList(shouldAdd, userID); } diff --git a/lib/ui/utils/message.dart b/lib/ui/utils/message.dart index b969e24..b8f9550 100644 --- a/lib/ui/utils/message.dart +++ b/lib/ui/utils/message.dart @@ -6,14 +6,22 @@ import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_change_info_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_tips_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_tips_elem.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_image.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_change_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_tips_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_tips_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_image.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_image.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/ui/constants/history_message_constant.dart'; import 'package:tencent_cloud_chat_uikit/ui/constants/time.dart'; @@ -41,8 +49,7 @@ class MessageUtils { // 是否是群组TRTC信息 static isGroupCallingMessage(V2TimMessage message) { final isGroup = message.groupID != null; - final isCustomMessage = - message.elemType == MessageElemType.V2TIM_ELEM_TYPE_CUSTOM; + final isCustomMessage = message.elemType == MessageElemType.V2TIM_ELEM_TYPE_CUSTOM; if (isCustomMessage) { final customElemData = message.customElem?.data ?? ""; return isCallingData(customElemData) && isGroup; @@ -70,8 +77,8 @@ class MessageUtils { } } - static Future _getGroupChangeType(V2TimGroupChangeInfo info, - List groupMemberList) async { + static Future _getGroupChangeType( + V2TimGroupChangeInfo info, List groupMemberList) async { int? type = info.type; var value = info.value; String s = TIM_t('群资料信息'); @@ -93,22 +100,20 @@ class MessageUtils { break; case GroupChangeInfoType.V2TIM_GROUP_INFO_CHANGE_TYPE_OWNER: s = TIM_t("群主"); - final V2TimGroupMemberFullInfo? groupMemberInfo = groupMemberList - .firstWhereOrNull((element) => element?.userID == value); + final V2TimGroupMemberFullInfo? groupMemberInfo = + groupMemberList.firstWhereOrNull((element) => element?.userID == value); if (groupMemberInfo != null) { value = TencentUtils.checkString(groupMemberInfo.friendRemark) ?? TencentUtils.checkString(groupMemberInfo.nameCard) ?? TencentUtils.checkString(groupMemberInfo.nickName) ?? TencentUtils.checkString(groupMemberInfo.userID); } else { - final res = await TencentImSDKPlugin.v2TIMManager - .getUsersInfo(userIDList: [value ?? ""]); + final res = await TencentImSDKPlugin.v2TIMManager.getUsersInfo(userIDList: [value ?? ""]); if (res.code == 0) { final List data = res.data ?? []; if (data.isNotEmpty) { final firstPerson = data[0]; - value = TencentUtils.checkString(firstPerson.nickName) ?? - TencentUtils.checkString(firstPerson.userID); + value = TencentUtils.checkString(firstPerson.nickName) ?? TencentUtils.checkString(firstPerson.userID); } } } @@ -126,15 +131,14 @@ class MessageUtils { final String option8 = s; if (value != null && value.isNotEmpty) { - return TIM_t_para("{{option8}}为 ", "$option8为 ")(option8: option8) + - value; + return TIM_t_para("{{option8}}为 ", "$option8为 ")(option8: option8) + value; } else { return option8; } } static String? _getOpUserNick(V2TimGroupMemberInfo? opUser) { - if(opUser == null){ + if (opUser == null) { return ""; } return TencentUtils.checkString(opUser.friendRemark) ?? @@ -160,8 +164,7 @@ class MessageUtils { } static Future groupTipsMessageAbstract( - V2TimGroupTipsElem groupTipsElem, - List groupMemberList) async { + V2TimGroupTipsElem groupTipsElem, List groupMemberList) async { String displayMessage; final operationType = groupTipsElem.type; final operationMember = groupTipsElem.opMember; @@ -175,8 +178,7 @@ class MessageUtils { bool changedValue = false; for (V2TimGroupChangeInfo? element in groupChangeInfoList) { final newText = await _getGroupChangeType(element!, groupMemberList); - changedInfoString += - (changedInfoString.isEmpty ? "" : " / ") + newText; + changedInfoString += (changedInfoString.isEmpty ? "" : " / ") + newText; changedValue = element!.boolValue ?? false; } if (changedInfoString.isEmpty) { @@ -184,73 +186,56 @@ class MessageUtils { } if (changedInfoString == TIM_t("全员禁言状态")) { changedInfoString = TIM_t("全员禁言"); - displayMessage = changedValue == false ? TIM_t_para("{{option7}} 取消", "$option7 取消")(option7: option7) + - changedInfoString : TIM_t_para("{{option7}} 开启", "$option7 开启")(option7: option7) + - changedInfoString; + displayMessage = changedValue == false + ? TIM_t_para("{{option7}} 取消", "$option7 取消")(option7: option7) + changedInfoString + : TIM_t_para("{{option7}} 开启", "$option7 开启")(option7: option7) + changedInfoString; } else { - displayMessage = - TIM_t_para("{{option7}}修改", "$option7修改")(option7: option7) + - changedInfoString; + displayMessage = TIM_t_para("{{option7}}修改", "$option7修改")(option7: option7) + changedInfoString; } break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_QUIT: final String? option6 = opUserNickName ?? ""; - displayMessage = - TIM_t_para("{{option6}}退出群聊", "$option6退出群聊")(option6: option6); + displayMessage = TIM_t_para("{{option6}}退出群聊", "$option6退出群聊")(option6: option6); break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_INVITE: - final option5 = - memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); + final option5 = memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); final inviteUser = _getOpUserNick(operationMember); - displayMessage = '$inviteUser' + - TIM_t_para("邀请{{option5}}加入群组", "邀请$option5加入群组")(option5: option5); + displayMessage = '$inviteUser' + TIM_t_para("邀请{{option5}}加入群组", "邀请$option5加入群组")(option5: option5); break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_KICKED: - final option4 = - memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); + final option4 = memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); final kickUser = _getOpUserNick(operationMember); - displayMessage = '$kickUser' + - TIM_t_para("将{{option4}}踢出群组", "将$option4踢出群组")(option4: option4); + displayMessage = '$kickUser' + TIM_t_para("将{{option4}}踢出群组", "将$option4踢出群组")(option4: option4); break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_JOIN: - final option3 = - memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); - displayMessage = TIM_t_para("用户{{option3}}加入了群聊", "用户$option3加入了群聊")( - option3: option3); + final option3 = memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); + displayMessage = TIM_t_para("用户{{option3}}加入了群聊", "用户$option3加入了群聊")(option3: option3); break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_MEMBER_INFO_CHANGE: displayMessage = groupTipsElem.memberList!.map((e) { - final changedMember = groupTipsElem.memberChangeInfoList! - .firstWhere((element) => element!.userID == e!.userID); + final changedMember = + groupTipsElem.memberChangeInfoList!.firstWhere((element) => element!.userID == e!.userID); final isMute = changedMember!.muteTime != 0; final option2 = _getMemberNickName(e!); final displayMessage = isMute ? TIM_t("禁言") : TIM_t("解除禁言"); - return TIM_t_para("{{option2}} 被", "$option2 被")(option2: option2) + - displayMessage; + return TIM_t_para("{{option2}} 被", "$option2 被")(option2: option2) + displayMessage; }).join("、"); break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_SET_ADMIN: - final adminMember = - memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); + final adminMember = memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); final opMember = _getOpUserNick(operationMember); final option1 = adminMember; - displayMessage = '$opMember' + - TIM_t_para("将 {{option1}} 设置为管理员", "将 $option1 设置为管理员")( - option1: option1); + displayMessage = '$opMember' + TIM_t_para("将 {{option1}} 设置为管理员", "将 $option1 设置为管理员")(option1: option1); break; case GroupTipsElemType.V2TIM_GROUP_TIPS_TYPE_CANCEL_ADMIN: - final adminMember = - memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); + final adminMember = memberList!.map((e) => _getMemberNickName(e!).toString()).join("、"); final opMember = _getOpUserNick(operationMember); final option1 = adminMember; - displayMessage = '$opMember' + - TIM_t_para("将 {{option1}} 取消管理员", "将 $option1 取消管理员")( - option1: option1); + displayMessage = '$opMember' + TIM_t_para("将 {{option1}} 取消管理员", "将 $option1 取消管理员")(option1: option1); break; default: final String option2 = operationType.toString(); - displayMessage = - TIM_t_para("系统消息 {{option2}}", "系统消息 $option2")(option2: option2); + displayMessage = TIM_t_para("系统消息 {{option2}}", "系统消息 $option2")(option2: option2); break; } return displayMessage; @@ -286,12 +271,10 @@ class MessageUtils { } static Widget wrapMessageTips(Widget child, TUITheme? theme) { - return Container( - margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 30), child: child); + return Container(margin: const EdgeInsets.symmetric(vertical: 10, horizontal: 30), child: child); } - static String getAbstractMessageAsync(V2TimMessage message, - List groupMemberList) { + static String getAbstractMessageAsync(V2TimMessage message, List groupMemberList) { final msgType = message.elemType; switch (msgType) { case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM: @@ -304,8 +287,7 @@ class MessageUtils { return TIM_t("[表情]"); case MessageElemType.V2TIM_ELEM_TYPE_FILE: final String? option2 = message.fileElem!.fileName ?? ""; - return TIM_t_para("[文件] {{option2}}", "[文件] $option2")( - option2: option2); + return TIM_t_para("[文件] {{option2}}", "[文件] $option2")(option2: option2); case MessageElemType.V2TIM_ELEM_TYPE_GROUP_TIPS: return TIM_t("群提示"); case MessageElemType.V2TIM_ELEM_TYPE_IMAGE: @@ -321,15 +303,12 @@ class MessageUtils { } } - static V2TimImage? getImageFromImgList( - List? list, List order) { + static V2TimImage? getImageFromImgList(List? list, List order) { V2TimImage? img; try { for (String type in order) { - img = list?.firstWhere( - (e) => - e?.type == HistoryMessageDartConstant.V2_TIM_IMAGE_TYPES[type], - orElse: () => null); + img = + list?.firstWhere((e) => e?.type == HistoryMessageDartConstant.V2_TIM_IMAGE_TYPES[type], orElse: () => null); } } catch (e) { outputLogger.i('getImageFromImgList error ${e.toString()}'); @@ -345,16 +324,15 @@ class MessageUtils { final displayName = friendRemark.isNotEmpty ? friendRemark : nameCard.isNotEmpty - ? nameCard - : nickName.isNotEmpty - ? nickName - : sender; + ? nameCard + : nickName.isNotEmpty + ? nickName + : sender; return displayName.toString(); } static Future?> handleMessageError( - Future?> fun, - BuildContext context) async { + Future?> fun, BuildContext context) async { final res = await fun; return handleMessageErrorCode(res, context); } diff --git a/lib/ui/views/TIMUIKitAddFriend/tim_uikit_add_friend.dart b/lib/ui/views/TIMUIKitAddFriend/tim_uikit_add_friend.dart index 20a7f37..432d2d7 100644 --- a/lib/ui/views/TIMUIKitAddFriend/tim_uikit_add_friend.dart +++ b/lib/ui/views/TIMUIKitAddFriend/tim_uikit_add_friend.dart @@ -2,7 +2,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_type_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/tim_uikit_wide_modal_operation_key.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/wide_popup.dart'; @@ -44,32 +45,24 @@ class TIMUIKitAddFriend extends StatefulWidget { class _TIMUIKitAddFriendState extends TIMUIKitState { final TextEditingController _controller = TextEditingController(); final CoreServicesImpl _coreServicesImpl = serviceLocator(); - final FriendshipServices _friendshipServices = - serviceLocator(); - final TUISelfInfoViewModel _selfInfoViewModel = - serviceLocator(); + final FriendshipServices _friendshipServices = serviceLocator(); + final TUISelfInfoViewModel _selfInfoViewModel = serviceLocator(); final FocusNode _focusNode = FocusNode(); bool isFocused = false; bool showResult = false; List? searchResult; - Widget _searchResultItemBuilder( - V2TimUserFullInfo friendInfo, TUITheme theme) { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + Widget _searchResultItemBuilder(V2TimUserFullInfo friendInfo, TUITheme theme) { + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; final faceUrl = friendInfo.faceUrl ?? ""; final userID = friendInfo.userID ?? ""; final String showName = - ((friendInfo.nickName != null && friendInfo.nickName!.isNotEmpty) - ? friendInfo.nickName - : userID) ?? - ""; + ((friendInfo.nickName != null && friendInfo.nickName!.isNotEmpty) ? friendInfo.nickName : userID) ?? ""; return InkWell( onTap: () async { - final checkFriend = await _friendshipServices.checkFriend( - userIDList: [userID], - checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_SINGLE); + final checkFriend = await _friendshipServices + .checkFriend(userIDList: [userID], checkType: FriendTypeEnum.V2TIM_FRIEND_TYPE_SINGLE); if (checkFriend != null) { final res = checkFriend.first; if (res.resultCode == 0 && res.resultType != 0) { @@ -126,9 +119,7 @@ class _TIMUIKitAddFriendState extends TIMUIKitState { children: [ Text( showName, - style: TextStyle( - color: theme.darkTextColor, - fontSize: isDesktopScreen ? 16 : 18), + style: TextStyle(color: theme.darkTextColor, fontSize: isDesktopScreen ? 16 : 18), ), const SizedBox( height: 4, @@ -145,16 +136,14 @@ class _TIMUIKitAddFriendState extends TIMUIKitState { ); } - List _searchResultBuilder( - List? searchResult, TUITheme theme) { + List _searchResultBuilder(List? searchResult, TUITheme theme) { final noResult = searchResult == null || searchResult.isEmpty; if (noResult) { return [ Container( margin: const EdgeInsets.only(top: 20), child: Center( - child: Text(TIM_t("该用户不存在"), - style: TextStyle(color: theme.weakTextColor, fontSize: 14)), + child: Text(TIM_t("该用户不存在"), style: TextStyle(color: theme.weakTextColor, fontSize: 14)), ), ) ]; diff --git a/lib/ui/views/TIMUIKitAddFriend/tim_uikit_send_application.dart b/lib/ui/views/TIMUIKitAddFriend/tim_uikit_send_application.dart index dbb0521..3949a9e 100644 --- a/lib/ui/views/TIMUIKitAddFriend/tim_uikit_send_application.dart +++ b/lib/ui/views/TIMUIKitAddFriend/tim_uikit_send_application.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/friend_type_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; @@ -20,11 +21,7 @@ class SendApplication extends StatefulWidget { final AddFriendLifeCycle? lifeCycle; const SendApplication( - {Key? key, - this.lifeCycle, - required this.friendInfo, - required this.model, - this.isShowDefaultGroup = false}) + {Key? key, this.lifeCycle, required this.friendInfo, required this.model, this.isShowDefaultGroup = false}) : super(key: key); @override @@ -38,21 +35,18 @@ class _SendApplicationState extends TIMUIKitState { @override void initState() { super.initState(); - final showName = - widget.model.loginInfo?.nickName ?? widget.model.loginInfo?.userID; + final showName = widget.model.loginInfo?.nickName ?? widget.model.loginInfo?.userID; _verficationController.text = "我是: $showName"; } @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final TUITheme theme = value.theme; - final FriendshipServices _friendshipServices = - serviceLocator(); + final FriendshipServices _friendshipServices = serviceLocator(); final faceUrl = widget.friendInfo.faceUrl ?? ""; final userID = widget.friendInfo.userID ?? ""; - final String showName = ((widget.friendInfo.nickName != null && - widget.friendInfo.nickName!.isNotEmpty) + final String showName = ((widget.friendInfo.nickName != null && widget.friendInfo.nickName!.isNotEmpty) ? widget.friendInfo.nickName : userID) ?? ""; @@ -81,26 +75,22 @@ class _SendApplicationState extends TIMUIKitState { children: [ Text( showName, - style: - TextStyle(color: theme.darkTextColor, fontSize: 18), + style: TextStyle(color: theme.darkTextColor, fontSize: 18), ), const SizedBox( height: 4, ), Text( "ID: $userID", - style: - TextStyle(fontSize: 13, color: theme.weakTextColor), + style: TextStyle(fontSize: 13, color: theme.weakTextColor), ), const SizedBox( height: 4, ), if (TencentUtils.checkString(option2) != null) Text( - TIM_t_para("个性签名: {{option2}}", "个性签名: $option2")( - option2: option2), - style: TextStyle( - fontSize: 13, color: theme.weakTextColor), + TIM_t_para("个性签名: {{option2}}", "个性签名: $option2")(option2: option2), + style: TextStyle(fontSize: 13, color: theme.weakTextColor), ), ], ) @@ -171,20 +161,17 @@ class _SendApplicationState extends TIMUIKitState { if (widget.isShowDefaultGroup == true) Container( color: theme.white, - padding: - const EdgeInsets.symmetric(horizontal: 16, vertical: 12), + padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Text( TIM_t("分组"), - style: - TextStyle(color: theme.darkTextColor, fontSize: 16), + style: TextStyle(color: theme.darkTextColor, fontSize: 16), ), Text( TIM_t("我的好友"), - style: - TextStyle(color: theme.darkTextColor, fontSize: 16), + style: TextStyle(color: theme.darkTextColor, fontSize: 16), ) ], ), @@ -200,8 +187,7 @@ class _SendApplicationState extends TIMUIKitState { final friendGroup = TIM_t("我的好友"); if (widget.lifeCycle?.shouldAddFriend != null && - await widget.lifeCycle!.shouldAddFriend(userID, remark, - friendGroup, addWording, context) == + await widget.lifeCycle!.shouldAddFriend(userID, remark, friendGroup, addWording, context) == false) { return; } diff --git a/lib/ui/views/TIMUIKitAddGroup/tim_uikit_add_group.dart b/lib/ui/views/TIMUIKitAddGroup/tim_uikit_add_group.dart index 9dc04d1..03200b1 100644 --- a/lib/ui/views/TIMUIKitAddGroup/tim_uikit_add_group.dart +++ b/lib/ui/views/TIMUIKitAddGroup/tim_uikit_add_group.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +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_uikit/data_services/core/tim_uikit_wide_modal_operation_key.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/wide_popup.dart'; @@ -23,14 +25,11 @@ class TIMUIKitAddGroup extends StatefulWidget { final AddGroupLifeCycle? lifeCycle; /// Navigate to group chat, if user is already a member of the current group. - final Function(String groupID, V2TimConversation conversation) - onTapExistGroup; + final Function(String groupID, V2TimConversation conversation) onTapExistGroup; final VoidCallback? closeFunc; - const TIMUIKitAddGroup( - {Key? key, this.lifeCycle, required this.onTapExistGroup, this.closeFunc}) - : super(key: key); + const TIMUIKitAddGroup({Key? key, this.lifeCycle, required this.onTapExistGroup, this.closeFunc}) : super(key: key); @override State createState() => _TIMUIKitAddGroupState(); @@ -39,10 +38,8 @@ class TIMUIKitAddGroup extends StatefulWidget { class _TIMUIKitAddGroupState extends TIMUIKitState { final TextEditingController _controller = TextEditingController(); final GroupServices _groupServices = serviceLocator(); - final ConversationService _conversationService = - serviceLocator(); - final TUIFriendShipViewModel friendShipViewModel = - serviceLocator(); + final ConversationService _conversationService = serviceLocator(); + final TUIFriendShipViewModel friendShipViewModel = serviceLocator(); List? _addedGroupList; List? groupResult = []; final FocusNode _focusNode = FocusNode(); @@ -79,24 +76,19 @@ class _TIMUIKitAddGroupState extends TIMUIKitState { final groupID = groupInfo.groupID; final showName = groupInfo.groupName ?? groupID; final groupType = _getGroupType(groupInfo.groupType); - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return InkWell( onTap: () async { - final V2TimConversation? groupConversation = - await getGroupConversation(groupID); + final V2TimConversation? groupConversation = await getGroupConversation(groupID); if (groupConversation != null) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("您已是群成员"), - infoCode: 6660202)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("您已是群成员"), infoCode: 6660202)); if (widget.closeFunc != null) { widget.closeFunc!(); } return; } - if(isDesktopScreen){ + if (isDesktopScreen) { if (widget.closeFunc != null) { widget.closeFunc!(); } @@ -107,20 +99,19 @@ class _TIMUIKitAddGroupState extends TIMUIKitState { height: MediaQuery.of(context).size.width * 0.4, title: TIM_t("添加群聊"), child: (closeFuncSendApplication) => SendJoinGroupApplication( - lifeCycle: widget.lifeCycle, - groupInfo: groupInfo, + lifeCycle: widget.lifeCycle, + groupInfo: groupInfo, ), ); - }else{ + } else { Navigator.push( context, MaterialPageRoute( builder: (context) => SendJoinGroupApplication( - lifeCycle: widget.lifeCycle, - groupInfo: groupInfo, - ))); + lifeCycle: widget.lifeCycle, + groupInfo: groupInfo, + ))); } - }, child: Container( padding: const EdgeInsets.symmetric(vertical: 12), @@ -156,24 +147,19 @@ class _TIMUIKitAddGroupState extends TIMUIKitState { ); } - List _searchResultBuilder( - List? searchResult, TUITheme theme) { + List _searchResultBuilder(List? searchResult, TUITheme theme) { final noResult = searchResult != null && searchResult.isEmpty; if (noResult) { return [ Container( margin: const EdgeInsets.only(top: 20), child: Center( - child: Text(TIM_t("该群聊不存在"), - style: TextStyle(color: theme.weakTextColor, fontSize: 14)), + child: Text(TIM_t("该群聊不存在"), style: TextStyle(color: theme.weakTextColor, fontSize: 14)), ), ) ]; } - return searchResult - ?.map((e) => _searchResultItemBuilder(e, theme)) - .toList() ?? - []; + return searchResult?.map((e) => _searchResultItemBuilder(e, theme)).toList() ?? []; } Future getGroupConversation(String groupID) async { @@ -186,15 +172,12 @@ class _TIMUIKitAddGroupState extends TIMUIKitState { })) != null) { V2TimConversation? conversation; - conversation = await _conversationService - .getConversationListByConversationId(convID: "group_$groupID"); + conversation = await _conversationService.getConversationListByConversationId(convID: "group_$groupID"); if (conversation == null) { await friendShipViewModel.loadGroupListData(); - if (friendShipViewModel.groupList - .indexWhere((element) => element.groupID == groupID) > - -1) { - final V2TimGroupInfo groupInfo = friendShipViewModel.groupList - .firstWhere((element) => element.groupID == groupID); + if (friendShipViewModel.groupList.indexWhere((element) => element.groupID == groupID) > -1) { + final V2TimGroupInfo groupInfo = + friendShipViewModel.groupList.firstWhere((element) => element.groupID == groupID); conversation = V2TimConversation( conversationID: "group_$groupID", type: 2, @@ -237,10 +220,7 @@ class _TIMUIKitAddGroupState extends TIMUIKitState { final res = await _groupServices.getGroupsInfo(groupIDList: [params]); if (res != null) { setState(() { - groupResult = res - .where((e) => e.resultCode == 0) - .map((e) => e.groupInfo!) - .toList(); + groupResult = res.where((e) => e.resultCode == 0).map((e) => e.groupInfo!).toList(); }); } else { setState(() { diff --git a/lib/ui/views/TIMUIKitAddGroup/tim_uikit_send_application.dart b/lib/ui/views/TIMUIKitAddGroup/tim_uikit_send_application.dart index 70c33d0..08f048a 100644 --- a/lib/ui/views/TIMUIKitAddGroup/tim_uikit_send_application.dart +++ b/lib/ui/views/TIMUIKitAddGroup/tim_uikit_send_application.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_callback.dart'; +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_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/add_group_life_cycle.dart'; @@ -18,16 +20,13 @@ class SendJoinGroupApplication extends StatefulWidget { final V2TimGroupInfo groupInfo; final AddGroupLifeCycle? lifeCycle; - const SendJoinGroupApplication( - {Key? key, required this.groupInfo, this.lifeCycle}) - : super(key: key); + const SendJoinGroupApplication({Key? key, required this.groupInfo, this.lifeCycle}) : super(key: key); @override State createState() => _SendJoinGroupApplicationState(); } -class _SendJoinGroupApplicationState - extends TIMUIKitState { +class _SendJoinGroupApplicationState extends TIMUIKitState { final TextEditingController _verficationController = TextEditingController(); final GroupServices _groupServices = serviceLocator(); final CoreServicesImpl _coreServicesImpl = serviceLocator(); @@ -37,14 +36,12 @@ class _SendJoinGroupApplicationState super.initState(); final loginUserInfo = _coreServicesImpl.loginUserInfo; final option1 = loginUserInfo?.nickName ?? loginUserInfo?.userID; - _verficationController.text = - TIM_t_para("我是: {{option1}}", "我是: $option1")(option1: option1); + _verficationController.text = TIM_t_para("我是: {{option1}}", "我是: $option1")(option1: option1); } Future addGroup(String groupID, String message) async { if (widget.lifeCycle?.shouldAddGroup != null && - await widget.lifeCycle!.shouldAddGroup(groupID, message, context) == - false) { + await widget.lifeCycle!.shouldAddGroup(groupID, message, context) == false) { return null; } return _groupServices.joinGroup(groupID: groupID, message: message); @@ -107,25 +104,21 @@ class _SendJoinGroupApplicationState children: [ Text( showName, - style: - TextStyle(color: theme.darkTextColor, fontSize: 18), + style: TextStyle(color: theme.darkTextColor, fontSize: 18), ), const SizedBox( height: 4, ), Text( "ID: $groupID", - style: - TextStyle(fontSize: 13, color: theme.weakTextColor), + style: TextStyle(fontSize: 13, color: theme.weakTextColor), ), const SizedBox( height: 4, ), Text( - TIM_t_para("群类型: {{option1}}", "群类型: $option1")( - option1: option1), - style: - TextStyle(fontSize: 12, color: theme.weakTextColor), + TIM_t_para("群类型: {{option1}}", "群类型: $option1")(option1: option1), + style: TextStyle(fontSize: 12, color: theme.weakTextColor), ), ], ) @@ -164,9 +157,7 @@ class _SendJoinGroupApplicationState final res = await addGroup(groupID, addWording); if (res?.code == 0) { onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("群申请已发送"), - infoCode: 6660201)); + type: TIMCallbackType.INFO, infoRecommendText: TIM_t("群申请已发送"), infoCode: 6660201)); } }, child: Text(TIM_t("发送"))), diff --git a/lib/ui/views/TIMUIKitBlackList/tim_uikit_black_list.dart b/lib/ui/views/TIMUIKitBlackList/tim_uikit_black_list.dart index 898a301..b68a9ff 100644 --- a/lib/ui/views/TIMUIKitBlackList/tim_uikit_black_list.dart +++ b/lib/ui/views/TIMUIKitBlackList/tim_uikit_black_list.dart @@ -2,7 +2,8 @@ import 'package:flutter/material.dart'; import 'package:flutter_slidable_plus_plus/flutter_slidable_plus_plus.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/block_list_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_friendship_view_model.dart'; @@ -13,8 +14,7 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme_view_model.dart'; -typedef BlackListItemBuilder = Widget Function( - BuildContext context, V2TimFriendInfo friendInfo); +typedef BlackListItemBuilder = Widget Function(BuildContext context, V2TimFriendInfo friendInfo); class TIMUIKitBlackList extends StatefulWidget { final void Function(V2TimFriendInfo friendInfo)? onTapItem; @@ -24,12 +24,7 @@ class TIMUIKitBlackList extends StatefulWidget { /// The life cycle hooks for block list business logic final BlockListLifeCycle? lifeCycle; - const TIMUIKitBlackList( - {Key? key, - this.onTapItem, - this.emptyBuilder, - this.itemBuilder, - this.lifeCycle}) + const TIMUIKitBlackList({Key? key, this.onTapItem, this.emptyBuilder, this.itemBuilder, this.lifeCycle}) : super(key: key); @override @@ -37,8 +32,7 @@ class TIMUIKitBlackList extends StatefulWidget { } class _TIMUIKitBlackListState extends TIMUIKitState { - final TUIFriendShipViewModel _friendshipViewModel = - serviceLocator(); + final TUIFriendShipViewModel _friendshipViewModel = serviceLocator(); _getShowName(V2TimFriendInfo item) { final friendRemark = item.friendRemark ?? ""; @@ -52,8 +46,7 @@ class _TIMUIKitBlackListState extends TIMUIKitState { final theme = Provider.of(context).theme; final showName = _getShowName(friendInfo); final faceUrl = friendInfo.userProfile?.faceUrl ?? ""; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; Widget itemWidget() { return Material( @@ -67,10 +60,7 @@ class _TIMUIKitBlackListState extends TIMUIKitState { child: Container( padding: const EdgeInsets.only(top: 10, left: 16, right: 16), decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Row( children: [ Container( @@ -88,15 +78,13 @@ class _TIMUIKitBlackListState extends TIMUIKitState { padding: const EdgeInsets.only(top: 10, bottom: 20), child: Text( showName, - style: TextStyle( - color: theme.black, fontSize: isDesktopScreen ? 14 : 18), + style: TextStyle(color: theme.black, fontSize: isDesktopScreen ? 14 : 18), ), )), if (isDesktopScreen) OutlinedButton( onPressed: () { - _friendshipViewModel - .deleteFromBlockList([friendInfo.userID]); + _friendshipViewModel.deleteFromBlockList([friendInfo.userID]); }, child: Text( TIM_t("移出黑名单"), @@ -116,8 +104,7 @@ class _TIMUIKitBlackListState extends TIMUIKitState { endActionPane: ActionPane(motion: const DrawerMotion(), children: [ SlidableAction( onPressed: (context) async { - await _friendshipViewModel - .deleteFromBlockList([friendInfo.userID]); + await _friendshipViewModel.deleteFromBlockList([friendInfo.userID]); }, backgroundColor: theme.cautionColor ?? CommonColor.cautionColor, foregroundColor: theme.white, @@ -133,7 +120,6 @@ class _TIMUIKitBlackListState extends TIMUIKitState { return widget.itemBuilder ?? _itemBuilder; } - @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { return MultiProvider( diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart index 92a655b..8fc1f59 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/TIMUIKitTongue/tim_uikit_chat_history_message_list_tongue_container.dart @@ -1,8 +1,10 @@ import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_at_info.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -60,11 +62,18 @@ class _TIMUIKitHistoryMessageListTongueContainerState extends TIMUIKitState 0 && !widget.scrollController.position.outOfRange && !widget.model.haveMoreLatestData) { + } else if (widget.scrollController.offset <= screenHeight * 1.6 && + widget.scrollController.offset > 0 && + !widget.scrollController.position.outOfRange && + !widget.model.haveMoreLatestData) { changePositionState(HistoryMessagePosition.inTwoScreen); - } else if (widget.scrollController.offset > screenHeight * 1.6 && !widget.scrollController.position.outOfRange && !widget.model.haveMoreLatestData) { + } else if (widget.scrollController.offset > screenHeight * 1.6 && + !widget.scrollController.position.outOfRange && + !widget.model.haveMoreLatestData) { changePositionState(HistoryMessagePosition.awayTwoScreen); } } @@ -134,7 +143,8 @@ class _TIMUIKitHistoryMessageListTongueContainerState extends TIMUIKitState= 0; i--) { final currentMsg = msgList[i]; - if (currentMsg?.timestamp == targetTimeStamp && currentMsg?.elemType != 11 && currentMsg!.msgID == targetMsg.msgID) { + if (currentMsg?.timestamp == targetTimeStamp && + currentMsg?.elemType != 11 && + currentMsg!.msgID == targetMsg.msgID) { // find the target index by timestamp and msgID isFound = true; targetIndex = -i; @@ -268,7 +273,8 @@ class _TIMUIKitHistoryMessageListState extends TIMUIKitState= 0; i--) { final currentMsg = msgList[i]; - if (currentMsg?.timestamp == targetTimeStamp && currentMsg?.elemType != 11 && currentMsg!.msgID == targetMsg.msgID) { + if (currentMsg?.timestamp == targetTimeStamp && + currentMsg?.elemType != 11 && + currentMsg!.msgID == targetMsg.msgID) { isFound = true; targetIndex = -i; break; @@ -354,14 +362,17 @@ class _TIMUIKitHistoryMessageListState extends TIMUIKitState valueKey = key as ValueKey; final String data = valueKey.value; - final int index = unreadMessageList.indexWhere((element) => getMessageIdentifier(element, 0) == data); + final int index = + unreadMessageList.indexWhere((element) => getMessageIdentifier(element, 0) == data); return index != -1 ? index : null; })), ), @@ -414,7 +429,11 @@ class _TIMUIKitHistoryMessageListState extends TIMUIKitState valueKey = key as ValueKey; final String data = valueKey.value; - final int index = readMessageList.indexWhere((element) => getMessageIdentifier(element, 0) == data); + final int index = + readMessageList.indexWhere((element) => getMessageIdentifier(element, 0) == data); return index > -1 ? index : null; })); }, diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart index f8bc517..6d59062 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_history_message_list_item.dart @@ -9,10 +9,14 @@ import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_change_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.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_state.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; @@ -68,7 +72,8 @@ typedef MessageRowBuilder = Widget? Function( Function onScrollToIndexBegin, ); -typedef MessageNickNameBuilder = Widget Function(BuildContext context, V2TimMessage message, TUIChatSeparateViewModel model); +typedef MessageNickNameBuilder = Widget Function( + BuildContext context, V2TimMessage message, TUIChatSeparateViewModel model); typedef MessageItemContent = Widget? Function( V2TimMessage message, @@ -175,7 +180,8 @@ class ToolTipsConfig { bool showTranslation; /// A builder for additional custom items. We recommend using `additionalMessageToolTips` instead of this field since version 2.0, as you only need to provide the data rather than the whole widget. This makes usage easier and you don't need to worry about the UI display. - final Widget? Function(V2TimMessage message, Function() closeTooltip, [Key? key, BuildContext? context])? additionalItemBuilder; + final Widget? Function(V2TimMessage message, Function() closeTooltip, [Key? key, BuildContext? context])? + additionalItemBuilder; /// A list of additional message tooltip menu items, provided with the data only. We recommend using this field instead of the previous `additionalItemBuilder`. List Function(V2TimMessage message, Function() closeTooltip)? additionalMessageToolTips; @@ -189,7 +195,8 @@ class ToolTipsConfig { this.showCopyMessage = true, this.showForwardMessage = true, this.additionalMessageToolTips, - @Deprecated("Please use `additionalMessageToolTips` instead. You are now only expected to specify the data, rather than providing a whole widget. This makes usage easier, as you no longer need to worry about the UI display.") + @Deprecated( + "Please use `additionalMessageToolTips` instead. You are now only expected to specify the data, rather than providing a whole widget. This makes usage easier, as you no longer need to worry about the UI display.") this.additionalItemBuilder}); } @@ -230,7 +237,8 @@ class TIMUIKitHistoryMessageListItem extends StatefulWidget { /// Auto mention user when send reply message final bool allowAtUserWhenReply; - @Deprecated("Nickname will not show in one-to-one chat, if you tend to control it in group chat, please use `isShowSelfNameInGroup` and `isShowOthersNameInGroup` from `config: TIMUIKitChatConfig` instead") + @Deprecated( + "Nickname will not show in one-to-one chat, if you tend to control it in group chat, please use `isShowSelfNameInGroup` and `isShowOthersNameInGroup` from `config: TIMUIKitChatConfig` instead") /// allow show user nick name final bool showNickName; @@ -278,7 +286,9 @@ class TIMUIKitHistoryMessageListItem extends StatefulWidget { const TIMUIKitHistoryMessageListItem( {Key? key, required this.message, - @Deprecated("Nickname will not show in one-to-one chat, if you tend to control it in group chat, please use `isShowSelfNameInGroup` and `isShowOthersNameInGroup` from `config: TIMUIKitChatConfig` instead") this.showNickName = false, + @Deprecated( + "Nickname will not show in one-to-one chat, if you tend to control it in group chat, please use `isShowSelfNameInGroup` and `isShowOthersNameInGroup` from `config: TIMUIKitChatConfig` instead") + this.showNickName = false, this.onScrollToIndex, this.onScrollToIndexBegin, this.onTapForOthersPortrait, @@ -342,7 +352,8 @@ class TipsActionItem extends TIMUIKitStatelessWidget { } } -class _TIMUIKItHistoryMessageListItemState extends TIMUIKitState with SingleTickerProviderStateMixin { +class _TIMUIKItHistoryMessageListItemState extends TIMUIKitState + with SingleTickerProviderStateMixin { SuperTooltip? tooltip; late AnimationController _animationController; @@ -370,7 +381,8 @@ class _TIMUIKItHistoryMessageListItemState extends TIMUIKitState(context); - final isDownloadWaiting = context.select((value) => value.isWaiting(widget.message.msgID ?? "")); + final isDownloadWaiting = + context.select((value) => value.isWaiting(widget.message.msgID ?? "")); final TUITheme theme = value.theme; final message = widget.message; final msgType = message.elemType; @@ -1139,8 +1189,16 @@ class _TIMUIKItHistoryMessageListItemState extends TIMUIKitState 50) { - model.addToMessageReadReceiptList(message); - } - }, - child: LayoutBuilder( - builder: (context, constraints) => Container( - padding: EdgeInsets.only(left: isSelf ? 0 : 16, right: isSelf ? 16 : 0), - margin: widget.padding ?? const EdgeInsets.only(bottom: 20), - child: Row( - key: _key, - mainAxisAlignment: MainAxisAlignment.spaceBetween, - crossAxisAlignment: CrossAxisAlignment.start, - children: [ - if (model.isMultiSelect) - Container( - margin: EdgeInsets.only(right: 12, top: 10, left: isSelf ? 16 : 0), - child: CheckBoxButton( - isChecked: model.getSelectedMessageList().contains(message), - onChanged: (value) { - model.setMessageItemChecked(message, value); - }, - ), + key: Key(message.id ?? message.msgID!), + // 判断消息是否可见 + onVisibilityChanged: (visibilityInfo) { + var visiblePercentage = visibilityInfo.visibleFraction * 100; + if (visiblePercentage > 50) { + model.addToMessageReadReceiptList(message); + } + }, + child: LayoutBuilder( + builder: (context, constraints) => Container( + padding: EdgeInsets.only(left: isSelf ? 0 : 16, right: isSelf ? 16 : 0), + margin: widget.padding ?? const EdgeInsets.only(bottom: 20), + child: Row( + key: _key, + mainAxisAlignment: MainAxisAlignment.spaceBetween, + crossAxisAlignment: CrossAxisAlignment.start, + children: [ + if (model.isMultiSelect) + Container( + margin: EdgeInsets.only(right: 12, top: 10, left: isSelf ? 16 : 0), + child: CheckBoxButton( + isChecked: model.getSelectedMessageList().contains(message), + onChanged: (value) { + model.setMessageItemChecked(message, value); + }, ), - Expanded( - child: MouseRegion( - onEnter: (_) { - if (isDesktopScreen && model.chatConfig.isUseMessageHoverBarOnDesktop) { + ), + Expanded( + child: MouseRegion( + onEnter: (_) { + if (isDesktopScreen && model.chatConfig.isUseMessageHoverBarOnDesktop) { + setState(() { + isShowWideToolTip = true; + }); + } + }, + onExit: (_) { + if (isDesktopScreen && model.chatConfig.isUseMessageHoverBarOnDesktop) { + Tooltip.dismissAllToolTips(); + Future.delayed(const Duration(milliseconds: 100), () { setState(() { - isShowWideToolTip = true; + isShowWideToolTip = false; }); + }); + } + }, + child: GestureDetector( + behavior: model.isMultiSelect ? HitTestBehavior.translucent : null, + onTap: () { + if (model.isMultiSelect) { + final checked = model.getSelectedMessageList().contains(message); + model.setMessageItemChecked(message, !checked); + } else { + return; } }, - onExit: (_) { - if (isDesktopScreen && model.chatConfig.isUseMessageHoverBarOnDesktop) { - Tooltip.dismissAllToolTips(); - Future.delayed(const Duration(milliseconds: 100), () { - setState(() { - isShowWideToolTip = false; - }); - }); - } - }, - child: GestureDetector( - behavior: model.isMultiSelect ? HitTestBehavior.translucent : null, - onTap: () { - if (model.isMultiSelect) { - final checked = model.getSelectedMessageList().contains(message); - model.setMessageItemChecked(message, !checked); - } else { - return; - } - }, - child: Row( - crossAxisAlignment: CrossAxisAlignment.start, - mainAxisAlignment: isSelf ? MainAxisAlignment.end : MainAxisAlignment.start, - children: [ - if (!isSelf && widget.showAvatar) - GestureDetector( - onLongPress: () { - if (widget.onLongPressForOthersHeadPortrait != null) {} - if (model.chatConfig.isAllowLongPressAvatarToAt) { - widget.onLongPressForOthersHeadPortrait!(message.sender, message.nickName); - } - }, - onTapDown: isDesktopScreen - ? (details) { + child: Row( + crossAxisAlignment: CrossAxisAlignment.start, + mainAxisAlignment: isSelf ? MainAxisAlignment.end : MainAxisAlignment.start, + children: [ + if (!isSelf && widget.showAvatar) + GestureDetector( + onLongPress: () { + if (widget.onLongPressForOthersHeadPortrait != null) {} + if (model.chatConfig.isAllowLongPressAvatarToAt) { + widget.onLongPressForOthersHeadPortrait!(message.sender, message.nickName); + } + }, + onTapDown: isDesktopScreen + ? (details) { + if (widget.onTapForOthersPortrait != null && widget.allowAvatarTap) { + widget.onTapForOthersPortrait!(message.sender ?? "", details); + } + } + : null, + onTap: isDesktopScreen + ? null + : () { + if (widget.onTapForOthersPortrait != null && widget.allowAvatarTap) { + widget.onTapForOthersPortrait!(message.sender ?? "", TapDownDetails()); + } + }, + onSecondaryTap: isDesktopScreen + ? null + : () { + if (widget.onSecondaryTapForOthersPortrait != null && widget.allowAvatarTap) { + widget.onSecondaryTapForOthersPortrait!(message.sender ?? "", TapDownDetails()); + } + }, + onSecondaryTapDown: isDesktopScreen + ? (details) { + if (widget.onSecondaryTapForOthersPortrait != null && widget.allowAvatarTap) { + widget.onSecondaryTapForOthersPortrait!(message.sender ?? "", details); + } + } + : null, + child: widget.userAvatarBuilder != null + ? widget.userAvatarBuilder!(context, message) + : Container( + margin: (isSelf && isShowNickNameForSelf) || (!isSelf && isShowNickNameForOthers) + ? const EdgeInsets.only(top: 2) + : null, + child: SizedBox( + width: 40, + height: 40, + child: Avatar( + faceUrl: message.faceUrl ?? "", + showName: MessageUtils.getDisplayName(message), + ), + ), + ), + ), + if (isSelf && widget.message.elemType == 6 && isDownloadWaiting) + Container( + margin: const EdgeInsets.only(top: 46, right: 10), + child: LoadingAnimationWidget.threeArchedCircle( + color: theme.weakTextColor ?? Colors.grey, + size: 20, + ), + ), + Container( + margin: widget.showAvatar + ? (isSelf ? const EdgeInsets.only(right: 13) : const EdgeInsets.only(left: 13)) + : null, + child: Column( + crossAxisAlignment: isSelf ? CrossAxisAlignment.end : CrossAxisAlignment.start, + children: [ + if ((isSelf && isShowNickNameForSelf) || (!isSelf && isShowNickNameForOthers)) + widget.topRowBuilder != null + ? widget.topRowBuilder!(context, message) + : Container( + // margin: const EdgeInsets.only(bottom: 4), + child: ConstrainedBox( + constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width / 1.7), + child: Text( + MessageUtils.getDisplayName(message), + overflow: TextOverflow.ellipsis, + style: widget.themeData?.nickNameTextStyle ?? + TextStyle(fontSize: 12, color: theme.weakTextColor), + ), + )), + Row( + crossAxisAlignment: CrossAxisAlignment.end, + children: [ + if (isSelf) + renderHoverTipAndReadStatus( + model, isSelf, message, isPeerRead, theme, isDownloadWaiting), + Container( + constraints: BoxConstraints( + maxWidth: constraints.maxWidth * 0.77, + ), + child: Builder(builder: (context) { + return GestureDetector( + child: IgnorePointer( + ignoring: model.isMultiSelect, + child: _getMessageItemBuilder(message, message.status, model)), + onSecondaryTapDown: (details) { + if (widget.onLongPress != null) { + widget.onLongPress!(context, message); + return; + } + if (!PlatformUtils().isMobile) { + if (widget.allowLongPress) { + _onOpenToolTip(context, message, model, theme, details, false, false); + } + } + }, + onLongPress: () { + if (widget.onLongPress != null) { + widget.onLongPress!(context, message); + return; + } + if (widget.allowLongPress && !isDesktopScreen) { + _onOpenToolTip(context, message, model, theme, null, false, false); + } + }, + onTapDown: (details) { + _tapDetails = details; + }, + ); + }), + ), + if (!isSelf && + message.elemType == MessageElemType.V2TIM_ELEM_TYPE_SOUND && + message.localCustomInt != null && + message.localCustomInt != HistoryMessageDartConstant.read) + Padding( + padding: const EdgeInsets.only(left: 5, bottom: 12), + child: Icon(Icons.circle, color: theme.cautionColor, size: 10)), + if (!isSelf) + renderHoverTipAndReadStatus( + model, isSelf, message, isPeerRead, theme, isDownloadWaiting), + ], + ), + TIMUIKitTextTranslationElem( + message: message, + customEmojiStickerList: widget.customEmojiStickerList, + isFromSelf: message.isSelf ?? true, + isShowJump: false, + clearJump: () {}, + chatModel: model), + if (widget.bottomRowBuilder != null) widget.bottomRowBuilder!(context, message) + ], + ), + ), + if (!isSelf && widget.message.elemType == 6 && isDownloadWaiting) + Container( + margin: const EdgeInsets.only(top: 46, left: 10), + child: LoadingAnimationWidget.threeArchedCircle( + color: theme.weakTextColor ?? Colors.grey, + size: 20, + ), + ), + if (isSelf && widget.showAvatar) + widget.userAvatarBuilder != null + ? widget.userAvatarBuilder!(context, message) + : SizedBox( + width: 40, + height: 40, + child: InkWell( + onTapDown: (details) { if (widget.onTapForOthersPortrait != null && widget.allowAvatarTap) { widget.onTapForOthersPortrait!(message.sender ?? "", details); } - } - : null, - onTap: isDesktopScreen - ? null - : () { - if (widget.onTapForOthersPortrait != null && widget.allowAvatarTap) { - widget.onTapForOthersPortrait!(message.sender ?? "", TapDownDetails()); - } }, - onSecondaryTap: isDesktopScreen - ? null - : () { - if (widget.onSecondaryTapForOthersPortrait != null && widget.allowAvatarTap) { - widget.onSecondaryTapForOthersPortrait!(message.sender ?? "", TapDownDetails()); - } - }, - onSecondaryTapDown: isDesktopScreen - ? (details) { - if (widget.onSecondaryTapForOthersPortrait != null && widget.allowAvatarTap) { - widget.onSecondaryTapForOthersPortrait!(message.sender ?? "", details); - } - } - : null, - child: widget.userAvatarBuilder != null - ? widget.userAvatarBuilder!(context, message) - : Container( - margin: (isSelf && isShowNickNameForSelf) || (!isSelf && isShowNickNameForOthers) ? const EdgeInsets.only(top: 2) : null, - child: SizedBox( - width: 40, - height: 40, - child: Avatar( - faceUrl: message.faceUrl ?? "", - showName: MessageUtils.getDisplayName(message), - ), - ), - ), - ), - if (isSelf && widget.message.elemType == 6 && isDownloadWaiting) - Container( - margin: const EdgeInsets.only(top: 46, right: 10), - child: LoadingAnimationWidget.threeArchedCircle( - color: theme.weakTextColor ?? Colors.grey, - size: 20, - ), - ), - Container( - margin: widget.showAvatar ? (isSelf ? const EdgeInsets.only(right: 13) : const EdgeInsets.only(left: 13)) : null, - child: Column( - crossAxisAlignment: isSelf ? CrossAxisAlignment.end : CrossAxisAlignment.start, - children: [ - if ((isSelf && isShowNickNameForSelf) || (!isSelf && isShowNickNameForOthers)) - widget.topRowBuilder != null - ? widget.topRowBuilder!(context, message) - : Container( - // margin: const EdgeInsets.only(bottom: 4), - child: ConstrainedBox( - constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width / 1.7), - child: Text( - MessageUtils.getDisplayName(message), - overflow: TextOverflow.ellipsis, - style: widget.themeData?.nickNameTextStyle ?? TextStyle(fontSize: 12, color: theme.weakTextColor), - ), - )), - Row( - crossAxisAlignment: CrossAxisAlignment.end, - children: [ - if (isSelf) renderHoverTipAndReadStatus(model, isSelf, message, isPeerRead, theme, isDownloadWaiting), - Container( - constraints: BoxConstraints( - maxWidth: constraints.maxWidth * 0.77, - ), - child: Builder(builder: (context) { - return GestureDetector( - child: IgnorePointer(ignoring: model.isMultiSelect, child: _getMessageItemBuilder(message, message.status, model)), - onSecondaryTapDown: (details) { - if (widget.onLongPress != null) { - widget.onLongPress!(context, message); - return; - } - if (!PlatformUtils().isMobile) { - if (widget.allowLongPress) { - _onOpenToolTip(context, message, model, theme, details, false, false); - } - } - }, - onLongPress: () { - if (widget.onLongPress != null) { - widget.onLongPress!(context, message); - return; - } - if (widget.allowLongPress && !isDesktopScreen) { - _onOpenToolTip(context, message, model, theme, null, false, false); - } - }, - onTapDown: (details) { - _tapDetails = details; - }, - ); - }), - ), - if (!isSelf && message.elemType == MessageElemType.V2TIM_ELEM_TYPE_SOUND && message.localCustomInt != null && message.localCustomInt != HistoryMessageDartConstant.read) - Padding(padding: const EdgeInsets.only(left: 5, bottom: 12), child: Icon(Icons.circle, color: theme.cautionColor, size: 10)), - if (!isSelf) renderHoverTipAndReadStatus(model, isSelf, message, isPeerRead, theme, isDownloadWaiting), - ], - ), - TIMUIKitTextTranslationElem( - message: message, - customEmojiStickerList: widget.customEmojiStickerList, - isFromSelf: message.isSelf ?? true, - isShowJump: false, - clearJump: () {}, - chatModel: model), - if (widget.bottomRowBuilder != null) widget.bottomRowBuilder!(context, message) - ], - ), - ), - if (!isSelf && widget.message.elemType == 6 && isDownloadWaiting) - Container( - margin: const EdgeInsets.only(top: 46, left: 10), - child: LoadingAnimationWidget.threeArchedCircle( - color: theme.weakTextColor ?? Colors.grey, - size: 20, - ), - ), - if (isSelf && widget.showAvatar) - widget.userAvatarBuilder != null - ? widget.userAvatarBuilder!(context, message) - : SizedBox( - width: 40, - height: 40, - child: InkWell( - onTapDown: (details) { - if (widget.onTapForOthersPortrait != null && widget.allowAvatarTap) { - widget.onTapForOthersPortrait!(message.sender ?? "", details); - } - }, - child: Avatar(faceUrl: message.faceUrl ?? "", showName: MessageUtils.getDisplayName(message)), - ), + child: Avatar( + faceUrl: message.faceUrl ?? "", showName: MessageUtils.getDisplayName(message)), ), - ], - ), + ), + ], ), ), ), - ], - ), + ), + ], ), + ), ), ); } diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_message_tooltip.dart b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_message_tooltip.dart index 6742576..7396798 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_message_tooltip.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_chat_message_tooltip.dart @@ -11,8 +11,10 @@ import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_self_info_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; @@ -45,8 +47,7 @@ class TIMUIKitMessageTooltip extends StatefulWidget { final bool allowAtUserWhenReply; /// the callback for long press event, except myself avatar - final Function(String? userId, String? nickName)? - onLongPressForOthersHeadPortrait; + final Function(String? userId, String? nickName)? onLongPressForOthersHeadPortrait; final bool isUseMessageReaction; @@ -87,11 +88,9 @@ class TIMUIKitMessageTooltip extends StatefulWidget { State createState() => TIMUIKitMessageTooltipState(); } -class TIMUIKitMessageTooltipState - extends TIMUIKitState { +class TIMUIKitMessageTooltipState extends TIMUIKitState { final TUIChatGlobalModel globalModal = serviceLocator(); - final TUISelfInfoViewModel selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoViewModel = serviceLocator(); bool isShowMoreSticker = false; bool fileBeenDownloaded = false; String filePath = ""; @@ -105,9 +104,7 @@ class TIMUIKitMessageTooltipState hasFile() { if (PlatformUtils().isMobile || - (widget.message.fileElem == null && - widget.message.imageElem == null && - widget.message.videoElem == null)) { + (widget.message.fileElem == null && widget.message.imageElem == null && widget.message.videoElem == null)) { fileBeenDownloaded = false; return; } @@ -117,8 +114,7 @@ class TIMUIKitMessageTooltipState } if (PlatformUtils().isDesktop) { if (widget.message.fileElem != null) { - String savePath = TencentUtils.checkString( - globalModal.getFileMessageLocation(widget.message.msgID)) ?? + String savePath = TencentUtils.checkString(globalModal.getFileMessageLocation(widget.message.msgID)) ?? TencentUtils.checkString(widget.message.fileElem!.localUrl) ?? widget.message.fileElem?.path ?? ""; @@ -129,17 +125,13 @@ class TIMUIKitMessageTooltipState return; } } else if (widget.message.imageElem != null) { - if (TencentUtils.checkString( - widget.message.imageElem!.imageList![0]!.localUrl) != - null && - File(widget.message.imageElem!.imageList![0]!.localUrl!) - .existsSync()) { + if (TencentUtils.checkString(widget.message.imageElem!.imageList![0]!.localUrl) != null && + File(widget.message.imageElem!.imageList![0]!.localUrl!).existsSync()) { fileBeenDownloaded = true; return; } } else if (widget.message.videoElem != null) { - if (TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) != - null && + if (TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) != null && File(widget.message.videoElem!.localVideoUrl!).existsSync()) { fileBeenDownloaded = true; return; @@ -150,8 +142,7 @@ class TIMUIKitMessageTooltipState } bool isRevocable(int timestamp, int upperTimeLimit) => - ((DateTime.now().millisecondsSinceEpoch / 1000).ceil() - timestamp < - upperTimeLimit) && + ((DateTime.now().millisecondsSinceEpoch / 1000).ceil() - timestamp < upperTimeLimit) && (widget.message.isSelf ?? true); Widget ItemInkWell({ @@ -173,8 +164,7 @@ class TIMUIKitMessageTooltipState bool isAdminCanRecall() { if (widget.model.chatConfig.isGroupAdminRecallEnabled) { - final selfMemberInfo = - widget.groupMemberInfo ?? widget.model.selfMemberInfo; + final selfMemberInfo = widget.groupMemberInfo ?? widget.model.selfMemberInfo; final selfRole = selfMemberInfo?.role; return selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN || selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER; @@ -183,36 +173,28 @@ class TIMUIKitMessageTooltipState } } - _buildLongPressTipItem( - TUITheme theme, TUIChatSeparateViewModel model, V2TimMessage message) { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; - final isCanRevokeSelf = isRevocable( - widget.message.timestamp!, model.chatConfig.upperRecallTime); - final shouldShowRevokeAction = (isCanRevokeSelf || isAdminCanRecall()) && - widget.message.status != MessageStatus.V2TIM_MSG_STATUS_SEND_FAIL; - final shouldShowReplyAction = !(widget.message.customElem?.data != null && - MessageUtils.isCallingData(widget.message.customElem!.data!)); - final shouldShowForwardAction = !(widget.message.customElem?.data != null && - MessageUtils.isCallingData(widget.message.customElem!.data!)); + _buildLongPressTipItem(TUITheme theme, TUIChatSeparateViewModel model, V2TimMessage message) { + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isCanRevokeSelf = isRevocable(widget.message.timestamp!, model.chatConfig.upperRecallTime); + final shouldShowRevokeAction = + (isCanRevokeSelf || isAdminCanRecall()) && widget.message.status != MessageStatus.V2TIM_MSG_STATUS_SEND_FAIL; + final shouldShowReplyAction = + !(widget.message.customElem?.data != null && MessageUtils.isCallingData(widget.message.customElem!.data!)); + final shouldShowForwardAction = + !(widget.message.customElem?.data != null && MessageUtils.isCallingData(widget.message.customElem!.data!)); final tooltipsConfig = widget.toolTipsConfig; - final messageCanCopy = widget.message.elemType == - MessageElemType.V2TIM_ELEM_TYPE_TEXT || - (isDesktopScreen && - widget.message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE && - fileBeenDownloaded); + final messageCanCopy = widget.message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT || + (isDesktopScreen && widget.message.elemType == MessageElemType.V2TIM_ELEM_TYPE_IMAGE && fileBeenDownloaded); bool showTranslation = true; if (widget.message.localCustomData != null) { - final LocalCustomDataModel localCustomData = LocalCustomDataModel.fromMap( - json.decode(TencentUtils.checkString(widget.message.localCustomData) ?? "{}")); + final LocalCustomDataModel localCustomData = + LocalCustomDataModel.fromMap(json.decode(TencentUtils.checkString(widget.message.localCustomData) ?? "{}")); if (localCustomData.translatedText != null && localCustomData.translatedText != "") { showTranslation = false; } } - - final dynamicQuote = - model.chatConfig.isAtWhenReplyDynamic?.call(widget.message); + final dynamicQuote = model.chatConfig.isAtWhenReplyDynamic?.call(widget.message); final List defaultTipsList = [ if (fileBeenDownloaded) @@ -241,8 +223,7 @@ class TIMUIKitMessageTooltipState onClick: () => _onTap("forwardMessage", model)), if (shouldShowReplyAction) MessageToolTipItem( - label: TIM_t( - (dynamicQuote ?? model.chatConfig.isAtWhenReply) ? "回复" : "引用"), + label: TIM_t((dynamicQuote ?? model.chatConfig.isAtWhenReply) ? "回复" : "引用"), id: "replyMessage", iconImageAsset: "images/reply_message.png", onClick: () => _onTap("replyMessage", model)), @@ -278,12 +259,10 @@ class TIMUIKitMessageTooltipState return tooltipsConfig.showCopyMessage; } if (type == "forwardMessage") { - return tooltipsConfig.showForwardMessage && - !(isDesktopScreen && widget.iSUseDefaultHoverBar); + return tooltipsConfig.showForwardMessage && !(isDesktopScreen && widget.iSUseDefaultHoverBar); } if (type == "replyMessage") { - return tooltipsConfig.showReplyMessage && - !(isDesktopScreen && widget.iSUseDefaultHoverBar); + return tooltipsConfig.showReplyMessage && !(isDesktopScreen && widget.iSUseDefaultHoverBar); } if (type == "delete") { return (!PlatformUtils().isWeb) && tooltipsConfig.showDeleteMessage; @@ -296,18 +275,15 @@ class TIMUIKitMessageTooltipState return tooltipsConfig.showRecallMessage; } if (type == "translate") { - return tooltipsConfig.showTranslation && - widget.message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT; + return tooltipsConfig.showTranslation && widget.message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT; } return true; }).toList(); } - final List? customList = - widget.toolTipsConfig?.additionalMessageToolTips != null - ? (widget.toolTipsConfig?.additionalMessageToolTips!( - message, widget.onCloseTooltip)) - : []; + final List? customList = widget.toolTipsConfig?.additionalMessageToolTips != null + ? (widget.toolTipsConfig?.additionalMessageToolTips!(message, widget.onCloseTooltip)) + : []; List formattedTipsList = [ ...defaultFormattedTipsList, @@ -331,9 +307,7 @@ class TIMUIKitMessageTooltipState children: [ Image.asset( item.iconImageAsset, - package: defaultTipsIds.contains(item.id) - ? 'tencent_cloud_chat_uikit' - : null, + package: defaultTipsIds.contains(item.id) ? 'tencent_cloud_chat_uikit' : null, width: 20, height: 20, ), @@ -370,9 +344,7 @@ class TIMUIKitMessageTooltipState children: [ Image.asset( item.iconImageAsset, - package: defaultTipsIds.contains(item.id) - ? 'tencent_cloud_chat_uikit' - : null, + package: defaultTipsIds.contains(item.id) ? 'tencent_cloud_chat_uikit' : null, width: 20, height: 20, ), @@ -419,19 +391,16 @@ class TIMUIKitMessageTooltipState switch (operation) { case "open": if (widget.message.fileElem != null) { - _onOpenDesktop(TencentUtils.checkString( - globalModal.getFileMessageLocation(widget.message.msgID)) ?? + _onOpenDesktop(TencentUtils.checkString(globalModal.getFileMessageLocation(widget.message.msgID)) ?? TencentUtils.checkString(widget.message.fileElem!.localUrl) ?? widget.message.fileElem?.path ?? ""); } else if (widget.message.imageElem != null) { - _onOpenDesktop(TencentUtils.checkString( - widget.message.imageElem!.imageList?[0]?.localUrl) ?? + _onOpenDesktop(TencentUtils.checkString(widget.message.imageElem!.imageList?[0]?.localUrl) ?? TencentUtils.checkString(widget.message.imageElem?.path) ?? ""); } else if (widget.message.videoElem != null) { - _onOpenDesktop(TencentUtils.checkString( - widget.message.videoElem!.localVideoUrl) ?? + _onOpenDesktop(TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) ?? TencentUtils.checkString(widget.message.videoElem?.videoPath) ?? ""); } @@ -439,19 +408,16 @@ class TIMUIKitMessageTooltipState case "finder": String savePath = ""; if (widget.message.fileElem != null) { - savePath = (TencentUtils.checkString( - globalModal.getFileMessageLocation(widget.message.msgID)) ?? + savePath = (TencentUtils.checkString(globalModal.getFileMessageLocation(widget.message.msgID)) ?? TencentUtils.checkString(widget.message.fileElem!.localUrl) ?? widget.message.fileElem?.path ?? ""); } else if (widget.message.imageElem != null) { - savePath = (TencentUtils.checkString( - widget.message.imageElem!.imageList?[0]?.localUrl) ?? + savePath = (TencentUtils.checkString(widget.message.imageElem!.imageList?[0]?.localUrl) ?? TencentUtils.checkString(widget.message.imageElem?.path) ?? ""); } else if (widget.message.videoElem != null) { - savePath = (TencentUtils.checkString( - widget.message.videoElem!.localVideoUrl) ?? + savePath = (TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) ?? TencentUtils.checkString(widget.message.videoElem?.videoPath) ?? ""); } @@ -462,10 +428,7 @@ class TIMUIKitMessageTooltipState model.deleteMsg(msgID, webMessageInstance: messageItem.messageFromWeb); break; case "revoke": - model.revokeMsg( - msgID, - !isRevocable( - widget.message.timestamp!, model.chatConfig.upperRecallTime), + model.revokeMsg(msgID, !isRevocable(widget.message.timestamp!, model.chatConfig.upperRecallTime), messageItem.messageFromWeb); break; case 'translate': @@ -488,23 +451,17 @@ class TIMUIKitMessageTooltipState case "copyMessage": if (widget.message.elemType == MessageElemType.V2TIM_ELEM_TYPE_TEXT) { try { - await Clipboard.setData( - ClipboardData(text: widget.message.textElem?.text ?? "")); - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("已复制"), - infoCode: 6660408)); + await Clipboard.setData(ClipboardData(text: widget.message.textElem?.text ?? "")); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("已复制"), infoCode: 6660408)); // ignore: empty_catches } catch (e) {} } break; case "replyMessage": model.repliedMessage = widget.message; - final dynamicQuote = - model.chatConfig.isAtWhenReplyDynamic?.call(widget.message); + final dynamicQuote = model.chatConfig.isAtWhenReplyDynamic?.call(widget.message); final isSelf = widget.message.isSelf ?? true; - final isGroup = - TencentUtils.checkString(widget.message.groupID) != null; + final isGroup = TencentUtils.checkString(widget.message.groupID) != null; final isAtWhenReply = !isSelf && isGroup && (dynamicQuote ?? widget.allowAtUserWhenReply) && @@ -512,14 +469,10 @@ class TIMUIKitMessageTooltipState /// If replying to a self message, do not add a at tag, only requestFocus. widget.onLongPressForOthersHeadPortrait!( - !isAtWhenReply ? null : widget.message.sender, - !isAtWhenReply ? null : widget.message.nickName); + !isAtWhenReply ? null : widget.message.sender, !isAtWhenReply ? null : widget.message.nickName); break; default: - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("暂未实现"), - infoCode: 6660409)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("暂未实现"), infoCode: 6660409)); } widget.onCloseTooltip(); } @@ -527,20 +480,17 @@ class TIMUIKitMessageTooltipState @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final TUITheme theme = value.theme; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return MultiProvider( providers: [ ChangeNotifierProvider.value(value: widget.model), ], builder: (BuildContext context, Widget? w) { - final TUIChatSeparateViewModel model = - Provider.of(context); - final bool haveExtraTipsConfig = widget.toolTipsConfig != null && - widget.toolTipsConfig?.additionalItemBuilder != null; + final TUIChatSeparateViewModel model = Provider.of(context); + final bool haveExtraTipsConfig = + widget.toolTipsConfig != null && widget.toolTipsConfig?.additionalItemBuilder != null; Widget? extraTipsActionItem = haveExtraTipsConfig - ? widget.toolTipsConfig!.additionalItemBuilder!( - widget.message, widget.onCloseTooltip, null, context) + ? widget.toolTipsConfig!.additionalItemBuilder!(widget.message, widget.onCloseTooltip, null, context) : null; final message = widget.message; return Container( @@ -563,8 +513,7 @@ class TIMUIKitMessageTooltipState ) : null, color: isDesktopScreen ? null : Colors.white, - padding: EdgeInsets.symmetric( - horizontal: 8, vertical: isDesktopScreen ? 8 : 4), + padding: EdgeInsets.symmetric(horizontal: 8, vertical: isDesktopScreen ? 8 : 4), child: ConstrainedBox( constraints: BoxConstraints( maxWidth: min(MediaQuery.of(context).size.width * 0.75, 350), @@ -574,8 +523,7 @@ class TIMUIKitMessageTooltipState children: [ if ((!isDesktopScreen || widget.isShowMoreSticker) && widget.isUseMessageReaction && - widget.selectEmojiPanelPosition == - SelectEmojiPanelPosition.up) + widget.selectEmojiPanelPosition == SelectEmojiPanelPosition.up) TIMUIKitMessageReactionEmojiSelectPanel( isShowMoreSticker: isShowMoreSticker, onSelect: (int value) => widget.onSelectSticker(value), @@ -587,8 +535,7 @@ class TIMUIKitMessageTooltipState ), if (!isDesktopScreen && widget.isUseMessageReaction && - widget.selectEmojiPanelPosition == - SelectEmojiPanelPosition.up && + widget.selectEmojiPanelPosition == SelectEmojiPanelPosition.up && isShowMoreSticker == false) Container( margin: const EdgeInsets.symmetric(vertical: 6), @@ -605,40 +552,31 @@ class TIMUIKitMessageTooltipState Expanded( child: Wrap( direction: Axis.horizontal, - alignment: - TUIKitScreenUtils.getFormFactor(context) == - DeviceType.Mobile - ? WrapAlignment.start - : WrapAlignment.start, + alignment: TUIKitScreenUtils.getFormFactor(context) == DeviceType.Mobile + ? WrapAlignment.start + : WrapAlignment.start, spacing: 12, runSpacing: 8, children: [ ..._buildLongPressTipItem(theme, model, message), - if (extraTipsActionItem != null) - extraTipsActionItem + if (extraTipsActionItem != null) extraTipsActionItem ], )), if (!isDesktopScreen && !widget.isUseMessageReaction) ConstrainedBox( constraints: BoxConstraints( - maxWidth: min( - MediaQuery.of(context).size.width * 0.75, - 350), + maxWidth: min(MediaQuery.of(context).size.width * 0.75, 350), ), child: Wrap( direction: Axis.horizontal, - alignment: - TUIKitScreenUtils.getFormFactor(context) == - DeviceType.Mobile - ? WrapAlignment.spaceBetween - : WrapAlignment.start, + alignment: TUIKitScreenUtils.getFormFactor(context) == DeviceType.Mobile + ? WrapAlignment.spaceBetween + : WrapAlignment.start, spacing: 4, runSpacing: 8, children: [ - ..._buildLongPressTipItem( - theme, model, message), - if (extraTipsActionItem != null) - extraTipsActionItem + ..._buildLongPressTipItem(theme, model, message), + if (extraTipsActionItem != null) extraTipsActionItem ], ), ), @@ -646,15 +584,13 @@ class TIMUIKitMessageTooltipState Table(columnWidths: const { 0: IntrinsicColumnWidth(), }, children: [ - ..._buildLongPressTipItem(theme, model, message) - .map((e) => TableRow(children: [e])) + ..._buildLongPressTipItem(theme, model, message).map((e) => TableRow(children: [e])) ]) ], ), if (!isDesktopScreen && widget.isUseMessageReaction && - widget.selectEmojiPanelPosition == - SelectEmojiPanelPosition.down && + widget.selectEmojiPanelPosition == SelectEmojiPanelPosition.down && isShowMoreSticker == false) Container( margin: const EdgeInsets.symmetric(vertical: 6), @@ -665,8 +601,7 @@ class TIMUIKitMessageTooltipState color: Colors.black12)), if ((!isDesktopScreen || widget.isShowMoreSticker) && widget.isUseMessageReaction && - widget.selectEmojiPanelPosition == - SelectEmojiPanelPosition.down) + widget.selectEmojiPanelPosition == SelectEmojiPanelPosition.down) TIMUIKitMessageReactionEmojiSelectPanel( isShowMoreSticker: isShowMoreSticker, onSelect: (int value) => widget.onSelectSticker(value), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_history_message_list_container.dart b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_history_message_list_container.dart index 4535728..7ec0905 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_history_message_list_container.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_history_message_list_container.dart @@ -4,10 +4,14 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_at_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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_controller.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -31,8 +35,7 @@ class TIMUIKitHistoryMessageListContainer extends StatefulWidget { final Widget Function(BuildContext, V2TimMessage?)? itemBuilder; final AutoScrollController? scrollController; final String conversationID; - final Function(String? userId, String? nickName)? - onLongPressForOthersHeadPortrait; + final Function(String? userId, String? nickName)? onLongPressForOthersHeadPortrait; final List? groupAtInfoList; final V2TimMessage? initFindingMsg; @@ -43,14 +46,13 @@ class TIMUIKitHistoryMessageListContainer extends StatefulWidget { final TIMUIKitInputTextFieldController? textFieldController; /// the builder for avatar - final Widget Function(BuildContext context, V2TimMessage message)? - userAvatarBuilder; + final Widget Function(BuildContext context, V2TimMessage message)? userAvatarBuilder; /// the builder for tongue final TongueItemBuilder? tongueItemBuilder; - final Widget? Function(V2TimMessage message, Function() closeTooltip, - [Key? key, BuildContext? context])? extraTipsActionItemBuilder; + final Widget? Function(V2TimMessage message, Function() closeTooltip, [Key? key, BuildContext? context])? + extraTipsActionItemBuilder; /// conversation type final ConvType conversationType; @@ -59,8 +61,7 @@ class TIMUIKitHistoryMessageListContainer extends StatefulWidget { final void Function(String userID, TapDownDetails tapDetails)? onTapAvatar; /// Avatar and name in message reaction secondary tap callback. - final void Function(String userID, TapDownDetails tapDetails)? - onSecondaryTapAvatar; + final void Function(String userID, TapDownDetails tapDetails)? onSecondaryTapAvatar; @Deprecated( "Nickname will not show in one-to-one chat, if you tend to control it in group chat, please use `isShowSelfNameInGroup` and `isShowOthersNameInGroup` from `config: TIMUIKitChatConfig` instead") @@ -114,37 +115,32 @@ class TIMUIKitHistoryMessageListContainer extends StatefulWidget { }) : super(key: key); @override - State createState() => - _TIMUIKitHistoryMessageListContainerState(); + State createState() => _TIMUIKitHistoryMessageListContainerState(); } -class _TIMUIKitHistoryMessageListContainerState - extends TIMUIKitState { +class _TIMUIKitHistoryMessageListContainerState extends TIMUIKitState { late TIMUIKitHistoryMessageListController _historyMessageListController; List historyMessageList = []; - Future requestForData(String? lastMsgID, LoadDirection direction, - TUIChatSeparateViewModel model, + Future requestForData(String? lastMsgID, LoadDirection direction, TUIChatSeparateViewModel model, [int? count, int? lastSeq]) async { - if ((direction == LoadDirection.previous) || - (direction == LoadDirection.latest && model.haveMoreLatestData)) { + if ((direction == LoadDirection.previous) || (direction == LoadDirection.latest && model.haveMoreLatestData)) { return await model.loadChatRecord( - direction: direction, - count: count ?? (kIsWeb ? 15 : HistoryMessageDartConstant.getCount), - lastMsgID: lastMsgID, - lastMsgSeq: lastSeq ?? -1,); + direction: direction, + count: count ?? (kIsWeb ? 15 : HistoryMessageDartConstant.getCount), + lastMsgID: lastMsgID, + lastMsgSeq: lastSeq ?? -1, + ); } else { return false; } } - Widget Function(BuildContext, V2TimMessage)? _getTopRowBuilder( - TUIChatSeparateViewModel model) { + Widget Function(BuildContext, V2TimMessage)? _getTopRowBuilder(TUIChatSeparateViewModel model) { if (widget.messageItemBuilder?.messageNickNameBuilder != null) { return (BuildContext context, V2TimMessage message) { - return widget.messageItemBuilder!.messageNickNameBuilder!( - context, message, model); + return widget.messageItemBuilder!.messageNickNameBuilder!(context, message, model); }; } return null; @@ -153,15 +149,13 @@ class _TIMUIKitHistoryMessageListContainerState @override void initState() { super.initState(); - _historyMessageListController = TIMUIKitHistoryMessageListController( - scrollController: widget.scrollController); + _historyMessageListController = TIMUIKitHistoryMessageListController(scrollController: widget.scrollController); } @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final chatConfig = Provider.of(context); - final TUIChatSeparateViewModel model = - Provider.of(context, listen: false); + final TUIChatSeparateViewModel model = Provider.of(context, listen: false); return TIMUIKitHistoryMessageListSelector( conversationID: model.conversationID, @@ -175,27 +169,22 @@ class _TIMUIKitHistoryMessageListContainerState mainHistoryListConfig: widget.mainHistoryListConfig, itemBuilder: (context, message) { return TIMUIKitHistoryMessageListItem( - customMessageHoverBarOnDesktop: - widget.customMessageHoverBarOnDesktop, + customMessageHoverBarOnDesktop: widget.customMessageHoverBarOnDesktop, groupMemberInfo: widget.groupMemberInfo, textFieldController: widget.textFieldController, userAvatarBuilder: widget.userAvatarBuilder, customEmojiStickerList: widget.customEmojiStickerList, topRowBuilder: _getTopRowBuilder(model), onScrollToIndex: _historyMessageListController.scrollToIndex, - onScrollToIndexBegin: - _historyMessageListController.scrollToIndexBegin, - toolTipsConfig: widget.toolTipsConfig ?? - ToolTipsConfig( - additionalItemBuilder: - widget.extraTipsActionItemBuilder), + onScrollToIndexBegin: _historyMessageListController.scrollToIndexBegin, + toolTipsConfig: + widget.toolTipsConfig ?? ToolTipsConfig(additionalItemBuilder: widget.extraTipsActionItemBuilder), message: message!, showAvatar: chatConfig.isShowAvatar, onSecondaryTapForOthersPortrait: widget.onSecondaryTapAvatar, onTapForOthersPortrait: widget.onTapAvatar, messageItemBuilder: widget.messageItemBuilder, - onLongPressForOthersHeadPortrait: - widget.onLongPressForOthersHeadPortrait, + onLongPressForOthersHeadPortrait: widget.onLongPressForOthersHeadPortrait, allowAtUserWhenReply: chatConfig.isAtWhenReply, allowAvatarTap: chatConfig.isAllowClickAvatar, allowLongPress: chatConfig.isAllowLongPressMessage, diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_message_read_receipt.dart b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_message_read_receipt.dart index 10cd2be..fe89b5a 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_message_read_receipt.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/tim_uikit_message_read_receipt.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_receipt.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_receipt.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; @@ -17,9 +19,7 @@ class TIMUIKitMessageReadReceipt extends TIMUIKitStatelessWidget { final V2TimMessage messageItem; final void Function(String, TapDownDetails tapDetails)? onTapAvatar; - TIMUIKitMessageReadReceipt( - {Key? key, this.onTapAvatar, required this.messageItem}) - : super(key: key); + TIMUIKitMessageReadReceipt({Key? key, this.onTapAvatar, required this.messageItem}) : super(key: key); @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { @@ -47,7 +47,7 @@ class TIMUIKitMessageReadReceipt extends TIMUIKitStatelessWidget { behavior: HitTestBehavior.opaque, onTap: () { if ((value?.readCount ?? 0) > 0) { - if(isDesktopScreen){ + if (isDesktopScreen) { TUIKitWidePopup.showPopupWindow( operationKey: TUIKitWideModalOperationKey.messageReadDetails, context: context, @@ -59,8 +59,7 @@ class TIMUIKitMessageReadReceipt extends TIMUIKitStatelessWidget { onTapAvatar: onTapAvatar, messageItem: messageItem, unreadCount: value?.unreadCount ?? 0, - readCount: value?.readCount ?? 0) - ); + readCount: value?.readCount ?? 0)); } else { if (value?.unreadCount == 0) { return; @@ -78,8 +77,7 @@ class TIMUIKitMessageReadReceipt extends TIMUIKitStatelessWidget { } }, child: Container( - padding: EdgeInsets.only( - bottom: 3, right: 6, left: 6, top: isDesktopScreen ? 2 : 6), + padding: EdgeInsets.only(bottom: 3, right: 6, left: 6, top: isDesktopScreen ? 2 : 6), child: ((value?.unreadCount ?? 0) == 0 && (value?.readCount ?? 0) > 0) ? Icon( Icons.check_circle_outline, @@ -94,15 +92,12 @@ class TIMUIKitMessageReadReceipt extends TIMUIKitStatelessWidget { shape: BoxShape.circle, border: Border.all( width: 1.3, - color: (value?.readCount ?? 0) > 0 - ? theme.primaryColor! - : theme.weakTextColor!)), + color: (value?.readCount ?? 0) > 0 ? theme.primaryColor! : theme.weakTextColor!)), child: (value?.readCount ?? 0) > 0 ? Text( '${value?.readCount ?? 0}', textAlign: TextAlign.center, - style: TextStyle( - fontSize: 8, color: theme.primaryColor), + style: TextStyle(fontSize: 8, color: theme.primaryColor), ) : null, ), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart index 77391f3..582dbc3 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKItMessageList/utils.dart @@ -1,8 +1,8 @@ -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; class TIMUIKitChatUtils { - static String? getMessageIDWithinIndex( - List messageList, int index) { + static String? getMessageIDWithinIndex(List messageList, int index) { if (messageList[index]!.elemType == 11) { if (index > 0) { return getMessageIDWithinIndex(messageList, index - 1); diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_detail.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_detail.dart index 8df8eab..1250c0d 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_detail.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_detail.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_self_info_view_model.dart'; @@ -36,28 +37,21 @@ class TIMUIKitMessageReactionDetail extends StatefulWidget { State createState() => TIMUIKitMessageReactionDetailState(); } -class TIMUIKitMessageReactionDetailState - extends TIMUIKitState +class TIMUIKitMessageReactionDetailState extends TIMUIKitState with TickerProviderStateMixin { - final TUISelfInfoViewModel selfInfoModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoModel = serviceLocator(); - Widget getUserItem( - String userID, TUITheme theme, Function(String userID, TapDownDetails tapDetails)? onTapAvatar) { + Widget getUserItem(String userID, TUITheme theme, Function(String userID, TapDownDetails tapDetails)? onTapAvatar) { V2TimGroupMemberFullInfo? memberInfo; String showName = userID; try { - memberInfo = - widget.memberList?.firstWhere((element) => element?.userID == userID); + memberInfo = widget.memberList?.firstWhere((element) => element?.userID == userID); if (memberInfo != null) { - if (memberInfo.friendRemark != null && - memberInfo.friendRemark!.isNotEmpty) { + if (memberInfo.friendRemark != null && memberInfo.friendRemark!.isNotEmpty) { showName = memberInfo.friendRemark!; - } else if (memberInfo.nameCard != null && - memberInfo.nameCard!.isNotEmpty) { + } else if (memberInfo.nameCard != null && memberInfo.nameCard!.isNotEmpty) { showName = memberInfo.nameCard!; - } else if (memberInfo.nickName != null && - memberInfo.nickName!.isNotEmpty) { + } else if (memberInfo.nickName != null && memberInfo.nickName!.isNotEmpty) { showName = memberInfo.nickName!; } else { showName = memberInfo.userID; @@ -77,10 +71,7 @@ class TIMUIKitMessageReactionDetailState }, child: Container( decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Row( children: [ Container( @@ -168,14 +159,12 @@ class TIMUIKitMessageReactionDetailState labelColor: theme.primaryColor, labelStyle: const TextStyle(fontWeight: FontWeight.bold), unselectedLabelColor: hexToColor("62626b"), - unselectedLabelStyle: - const TextStyle(fontWeight: FontWeight.normal), + unselectedLabelStyle: const TextStyle(fontWeight: FontWeight.normal), indicatorSize: TabBarIndicatorSize.label, indicatorColor: theme.primaryColor ?? hexToColor("62626b"), tabs: [ ...widget.stickerList.map((element) { - return stickerItem(element, - widget.messageReaction[element.toString()].length); + return stickerItem(element, widget.messageReaction[element.toString()].length); }) ], ), @@ -183,8 +172,7 @@ class TIMUIKitMessageReactionDetailState Expanded( child: TabBarView( children: widget.stickerList - .map((int sticker) => getStickerNameList( - sticker, theme, widget.onTapAvatar)) + .map((int sticker) => getStickerNameList(sticker, theme, widget.onTapAvatar)) .toList())) ], ), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_item.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_item.dart index c11f243..5d60a98 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_item.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_item.dart @@ -4,10 +4,14 @@ import 'package:collection/collection.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_change_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.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_statelesswidget.dart'; @@ -45,8 +49,7 @@ class TIMUIKitMessageReactionShowItem extends TIMUIKitStatelessWidget { Key? key}) : super(key: key); - final TUISelfInfoViewModel selfInfoModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoModel = serviceLocator(); final MessageService _messageService = serviceLocator(); clickOnCurrentSticker() async { @@ -68,22 +71,21 @@ class TIMUIKitMessageReactionShowItem extends TIMUIKitStatelessWidget { Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; final option1 = nameList.length; - final TUIChatSeparateViewModel model = - Provider.of(context); + final TUIChatSeparateViewModel model = Provider.of(context); final List userIDs = []; for (final user in nameList) { - final V2TimGroupMemberFullInfo? memberInfo = memberList - .firstWhereOrNull((element) => element?.userID == user && TencentUtils.checkString(user) != null); - if((memberInfo == null || TencentUtils.checkString(memberInfo.userID) == null) && TencentUtils.checkString(user.toString()) != null){ + final V2TimGroupMemberFullInfo? memberInfo = + memberList.firstWhereOrNull((element) => element?.userID == user && TencentUtils.checkString(user) != null); + if ((memberInfo == null || TencentUtils.checkString(memberInfo.userID) == null) && + TencentUtils.checkString(user.toString()) != null) { userIDs.add(user.toString()); } } - if(userIDs.isNotEmpty){ + if (userIDs.isNotEmpty) { model.getUserShowName(userIDs); } - return LayoutBuilder(builder: (context, constraints) { return Container( padding: const EdgeInsets.only( @@ -101,14 +103,11 @@ class TIMUIKitMessageReactionShowItem extends TIMUIKitStatelessWidget { InkWell( onTap: clickOnCurrentSticker, child: Container( - margin: EdgeInsets.only( - bottom: (!PlatformUtils().isIOS) ? 4 : 2, - top: (!PlatformUtils().isIOS) ? 4 : 0), + margin: + EdgeInsets.only(bottom: (!PlatformUtils().isIOS) ? 4 : 2, top: (!PlatformUtils().isIOS) ? 4 : 0), child: Text( String.fromCharCode(sticker), - style: TextStyle( - fontSize: (!PlatformUtils().isIOS) ? 12 : 16, - color: hexToColor("f9453d")), + style: TextStyle(fontSize: (!PlatformUtils().isIOS) ? 12 : 16, color: hexToColor("f9453d")), ), ), ), @@ -135,8 +134,7 @@ class TIMUIKitMessageReactionShowItem extends TIMUIKitStatelessWidget { onShowDetail(sticker); }, child: Text( - TIM_t_para("...共{{option1}}人", "...共$option1人")( - option1: option1), + TIM_t_para("...共{{option1}}人", "...共$option1人")(option1: option1), style: TextStyle(fontSize: 12, color: hexToColor("616669")), ), ), @@ -145,36 +143,33 @@ class TIMUIKitMessageReactionShowItem extends TIMUIKitStatelessWidget { String showName = e; if (memberList.isNotEmpty) { try { - final V2TimGroupMemberFullInfo? memberInfo = memberList - .firstWhere((element) => element?.userID == e); + final V2TimGroupMemberFullInfo? memberInfo = + memberList.firstWhere((element) => element?.userID == e); if (memberInfo != null) { - if (memberInfo.friendRemark != null && - memberInfo.friendRemark!.isNotEmpty) { + if (memberInfo.friendRemark != null && memberInfo.friendRemark!.isNotEmpty) { showName = memberInfo.friendRemark!; - } else if (memberInfo.nameCard != null && - memberInfo.nameCard!.isNotEmpty) { + } else if (memberInfo.nameCard != null && memberInfo.nameCard!.isNotEmpty) { showName = memberInfo.nameCard!; - } else if (memberInfo.nickName != null && - memberInfo.nickName!.isNotEmpty) { + } else if (memberInfo.nickName != null && memberInfo.nickName!.isNotEmpty) { showName = memberInfo.nickName!; } else { showName = memberInfo.userID; } - }else{ + } else { final String? data = model.groupUserShowName[e]; - if(TencentUtils.checkString(data) != null){ + if (TencentUtils.checkString(data) != null) { showName = data ?? e; } } } catch (error) { final String? data = model.groupUserShowName[e]; - if(TencentUtils.checkString(data) != null){ + if (TencentUtils.checkString(data) != null) { showName = data ?? e; } } - }else{ + } else { final String? data = model.groupUserShowName[e]; - if(TencentUtils.checkString(data) != null){ + if (TencentUtils.checkString(data) != null) { showName = data ?? e; } } @@ -188,8 +183,7 @@ class TIMUIKitMessageReactionShowItem extends TIMUIKitStatelessWidget { }, child: Text( showName, - style: TextStyle( - fontSize: 12, color: hexToColor("616669")), + style: TextStyle(fontSize: 12, color: hexToColor("616669")), ), ); }) diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart index 81b84c4..e7154f2 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_show_panel.dart @@ -1,8 +1,10 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.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_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -20,21 +22,13 @@ class TIMUIKitMessageReactionShowPanel extends TIMUIKitStatelessWidget { /// current message final V2TimMessage message; - TIMUIKitMessageReactionShowPanel({required this.message, Key? key}) - : super(key: key); + TIMUIKitMessageReactionShowPanel({required this.message, Key? key}) : super(key: key); - final TUISelfInfoViewModel selfInfoModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoModel = serviceLocator(); - void showMore( - BuildContext context, - List? memberList, - Map messageReaction, - int currentSticker, - List stickerList, - TUIChatSeparateViewModel model) async { - _showCustomModalBottomSheet(context, memberList, messageReaction, - currentSticker, stickerList, model); + void showMore(BuildContext context, List? memberList, Map messageReaction, + int currentSticker, List stickerList, TUIChatSeparateViewModel model) async { + _showCustomModalBottomSheet(context, memberList, messageReaction, currentSticker, stickerList, model); } Future> _showCustomModalBottomSheet( @@ -71,8 +65,7 @@ class TIMUIKitMessageReactionShowPanel extends TIMUIKitStatelessWidget { Center( child: Text( TIM_t("回应详情"), - style: const TextStyle( - fontWeight: FontWeight.bold, fontSize: 16.0), + style: const TextStyle(fontWeight: FontWeight.bold, fontSize: 16.0), ), ), IconButton( @@ -88,8 +81,7 @@ class TIMUIKitMessageReactionShowPanel extends TIMUIKitStatelessWidget { child: TIMUIKitMessageReactionDetail( onTapAvatar: model.onTapAvatar, stickerList: stickerList, - currentStickerIndex: stickerList - .indexWhere((element) => element == currentSticker), + currentStickerIndex: stickerList.indexWhere((element) => element == currentSticker), memberList: memberList, messageReaction: messageReaction, )), @@ -102,12 +94,9 @@ class TIMUIKitMessageReactionShowPanel extends TIMUIKitStatelessWidget { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { Map messageReaction = {}; - CloudCustomData messageCloudCustomData = - MessageReactionUtils.getCloudCustomData(message); - final TUIChatSeparateViewModel model = - Provider.of(context); - if (messageCloudCustomData.messageReaction != null && - messageCloudCustomData.messageReaction!.isNotEmpty) { + CloudCustomData messageCloudCustomData = MessageReactionUtils.getCloudCustomData(message); + final TUIChatSeparateViewModel model = Provider.of(context); + if (messageCloudCustomData.messageReaction != null && messageCloudCustomData.messageReaction!.isNotEmpty) { messageReaction = messageCloudCustomData.messageReaction!; } else { return const SizedBox(width: 0, height: 0); @@ -119,8 +108,7 @@ class TIMUIKitMessageReactionShowPanel extends TIMUIKitStatelessWidget { messageReactionStickerList.add(int.parse(key)); }); - final filteredMessageReactionStickerList = - messageReactionStickerList.where((sticker) { + final filteredMessageReactionStickerList = messageReactionStickerList.where((sticker) { if (messageReaction[sticker.toString()] == null || messageReaction[sticker.toString()] is! List || messageReaction[sticker.toString()].length == 0) { @@ -160,8 +148,8 @@ class TIMUIKitMessageReactionShowPanel extends TIMUIKitStatelessWidget { nameList: messageReaction[sticker.toString()], sticker: sticker, onShowDetail: (int sticker) { - showMore(context, memberList, messageReaction, sticker, - filteredMessageReactionStickerList, model); + showMore( + context, memberList, messageReaction, sticker, filteredMessageReactionStickerList, model); }); }).toList(), ], diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_utils.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_utils.dart index 3539539..efa69c6 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_utils.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_utils.dart @@ -1,8 +1,11 @@ import 'dart:convert'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_change_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_change_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_self_info_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/message/message_services.dart'; @@ -11,18 +14,14 @@ import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/tim_uikit_cloud_custom_data.dart'; class MessageReactionUtils { - static final TUISelfInfoViewModel selfInfoModel = - serviceLocator(); - static final MessageService _messageService = - serviceLocator(); + static final TUISelfInfoViewModel selfInfoModel = serviceLocator(); + static final MessageService _messageService = serviceLocator(); static CloudCustomData getCloudCustomData(V2TimMessage message) { CloudCustomData messageCloudCustomData; try { - messageCloudCustomData = CloudCustomData.fromJson(json.decode( - TencentUtils.checkString(message.cloudCustomData) != null - ? message.cloudCustomData! - : "{}")); + messageCloudCustomData = CloudCustomData.fromJson( + json.decode(TencentUtils.checkString(message.cloudCustomData) != null ? message.cloudCustomData! : "{}")); } catch (e) { messageCloudCustomData = CloudCustomData(); } @@ -34,11 +33,9 @@ class MessageReactionUtils { return getCloudCustomData(message).messageReaction ?? {}; } - static Future> clickOnSticker( - V2TimMessage message, int sticker) async { + static Future> clickOnSticker(V2TimMessage message, int sticker) async { final CloudCustomData messageCloudCustomData = getCloudCustomData(message); - final Map messageReaction = - messageCloudCustomData.messageReaction ?? {}; + final Map messageReaction = messageCloudCustomData.messageReaction ?? {}; List targetList = messageReaction["$sticker"] ?? []; if (targetList.contains(selfInfoModel.loginInfo!.userID!)) { targetList.remove(selfInfoModel.loginInfo!.userID!); @@ -49,8 +46,7 @@ class MessageReactionUtils { if (PlatformUtils().isWeb) { final decodedMessage = jsonDecode(message.messageFromWeb!); - decodedMessage["cloudCustomData"] = - jsonEncode(messageCloudCustomData.toMap()); + decodedMessage["cloudCustomData"] = jsonEncode(messageCloudCustomData.toMap()); message.messageFromWeb = jsonEncode(decodedMessage); } else { message.cloudCustomData = json.encode(messageCloudCustomData.toMap()); diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_wrapper.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_wrapper.dart index ba2ba6b..c0efb06 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_wrapper.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/TIMUIKitMessageReaction/tim_uikit_message_reaction_wrapper.dart @@ -2,7 +2,8 @@ import 'dart:async'; import 'dart:convert'; import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/common_utils.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_state.dart'; @@ -27,7 +28,7 @@ class TIMUIKitMessageReactionWrapper extends StatefulWidget { this.clearJump, required this.isFromSelf, this.backgroundColor, - required this.chatModel, + required this.chatModel, required this.message, this.borderRadius, required this.child, @@ -38,15 +39,13 @@ class TIMUIKitMessageReactionWrapper extends StatefulWidget { State createState() => _TIMUIKitMessageReactionWrapperState(); } -class _TIMUIKitMessageReactionWrapperState - extends TIMUIKitState { +class _TIMUIKitMessageReactionWrapperState extends TIMUIKitState { bool isShowJumpState = false; bool isShining = false; bool isShowBorder = false; _showJumpColor() { - if ((widget.chatModel.jumpMsgID != widget.message.msgID) && - (widget.message.msgID?.isNotEmpty ?? true)) { + if ((widget.chatModel.jumpMsgID != widget.message.msgID) && (widget.message.msgID?.isNotEmpty ?? true)) { return; } isShining = true; @@ -78,15 +77,12 @@ class _TIMUIKitMessageReactionWrapperState CloudCustomData messageCloudCustomData; try { messageCloudCustomData = CloudCustomData.fromJson(json.decode( - TencentUtils.checkString(widget.message.cloudCustomData) != null - ? widget.message.cloudCustomData! - : "{}")); + TencentUtils.checkString(widget.message.cloudCustomData) != null ? widget.message.cloudCustomData! : "{}")); } catch (e) { messageCloudCustomData = CloudCustomData(); } - if (messageCloudCustomData.messageReaction != null && - messageCloudCustomData.messageReaction!.isNotEmpty) { + if (messageCloudCustomData.messageReaction != null && messageCloudCustomData.messageReaction!.isNotEmpty) { messageReaction = messageCloudCustomData.messageReaction!; } else { return false; @@ -98,8 +94,7 @@ class _TIMUIKitMessageReactionWrapperState messageReactionStickerList.add(int.parse(key)); }); - final filteredMessageReactionStickerList = - messageReactionStickerList.where((sticker) { + final filteredMessageReactionStickerList = messageReactionStickerList.where((sticker) { if (messageReaction[sticker.toString()] == null || messageReaction[sticker.toString()] is! List || messageReaction[sticker.toString()].length == 0) { @@ -135,29 +130,23 @@ class _TIMUIKitMessageReactionWrapperState _showJumpColor(); }); } else { - if ((widget.chatModel.jumpMsgID == widget.message.msgID) && - (widget.message.msgID?.isNotEmpty ?? false)) { - if(widget.clearJump != null){ + if ((widget.chatModel.jumpMsgID == widget.message.msgID) && (widget.message.msgID?.isNotEmpty ?? false)) { + if (widget.clearJump != null) { widget.clearJump!(); } } } } - final defaultStyle = widget.isFromSelf - ? theme.lightPrimaryMaterialColor.shade50 - : theme.weakBackgroundColor; - final backgroundColor = isShowJumpState - ? const Color.fromRGBO(245, 166, 35, 1) - : (widget.backgroundColor ?? defaultStyle); + final defaultStyle = widget.isFromSelf ? theme.lightPrimaryMaterialColor.shade50 : theme.weakBackgroundColor; + final backgroundColor = + isShowJumpState ? const Color.fromRGBO(245, 166, 35, 1) : (widget.backgroundColor ?? defaultStyle); if (!widget.isShowMessageReaction || !isHaveMessageReaction()) { return Container( decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(5)), - border: Border.all( - color: Color.fromRGBO(245, 166, 35, (isShowBorder ? 1 : 0)), - width: 2)), + border: Border.all(color: Color.fromRGBO(245, 166, 35, (isShowBorder ? 1 : 0)), width: 2)), child: widget.child, ); } @@ -168,21 +157,17 @@ class _TIMUIKitMessageReactionWrapperState color: backgroundColor, borderRadius: widget.borderRadius ?? borderRadius, ), - constraints: - BoxConstraints(maxWidth: MediaQuery.of(context).size.width * 0.7), + constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width * 0.7), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(5)), - border: Border.all( - color: Color.fromRGBO(245, 166, 35, (isShowBorder ? 1 : 0)), - width: 2)), + border: Border.all(color: Color.fromRGBO(245, 166, 35, (isShowBorder ? 1 : 0)), width: 2)), child: widget.child, ), - if (widget.isShowMessageReaction) - TIMUIKitMessageReactionShowPanel(message: widget.message) + if (widget.isShowMessageReaction) TIMUIKitMessageReactionShowPanel(message: widget.message) ], ), ); diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_custom_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_custom_elem.dart index 0619b49..97bd4d7 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_custom_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_custom_elem.dart @@ -2,8 +2,10 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_custom_elem.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_custom_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_custom_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.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_statelesswidget.dart'; @@ -43,9 +45,7 @@ class TIMUIKitCustomElem extends TIMUIKitStatelessWidget { topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)); - final backgroundColor = isFromSelf - ? theme.lightPrimaryMaterialColor.shade50 - : theme.weakBackgroundColor; + final backgroundColor = isFromSelf ? theme.lightPrimaryMaterialColor.shade50 : theme.weakBackgroundColor; return Container( padding: textPadding ?? const EdgeInsets.all(10), decoration: BoxDecoration( @@ -54,9 +54,7 @@ class TIMUIKitCustomElem extends TIMUIKitStatelessWidget { ), constraints: const BoxConstraints(maxWidth: 240), child: Column( - children: [ - Text(TIM_t("自定义消息")) - ], + children: [Text(TIM_t("自定义消息"))], )); } } diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_face_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_face_elem.dart index 4a4c165..1965eb4 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_face_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_face_elem.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.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_state.dart'; @@ -29,7 +30,6 @@ class TIMUIKitFaceElem extends StatefulWidget { } class _TIMUIKitTextElemState extends TIMUIKitState { - bool isFromNetwork() { return widget.path.startsWith('http'); } @@ -50,7 +50,7 @@ class _TIMUIKitTextElemState extends TIMUIKitState { Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return TIMUIKitMessageReactionWrapper( - chatModel: widget.model, + chatModel: widget.model, isShowJump: widget.isShowJump, isFromSelf: widget.message.isSelf ?? true, clearJump: widget.clearJump, @@ -58,11 +58,8 @@ class _TIMUIKitTextElemState extends TIMUIKitState { isShowMessageReaction: widget.isShowMessageReaction ?? true, child: Container( padding: const EdgeInsets.all(10), - constraints: - BoxConstraints(maxWidth: MediaQuery.of(context).size.width * (isDesktopScreen ? 0.1 : 0.3)), - child: isFromNetwork() - ? Image.network(widget.path) - : Image.asset(createPathFromNative(widget.path)), + constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width * (isDesktopScreen ? 0.1 : 0.3)), + child: isFromNetwork() ? Image.network(widget.path) : Image.asset(createPathFromNative(widget.path)), )); } } diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_file_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_file_elem.dart index b4c6678..cf3a154 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_file_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_file_elem.dart @@ -10,9 +10,12 @@ import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:open_file/open_file.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimAdvancedMsgListener.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_file_elem.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_download_progress.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_file_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_file_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_download_progress.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_download_progress.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; @@ -70,9 +73,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { @override void dispose() { if (advancedMsgListener != null) { - TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .removeAdvancedMsgListener(listener: advancedMsgListener); + TencentImSDKPlugin.v2TIMManager.getMessageManager().removeAdvancedMsgListener(listener: advancedMsgListener); advancedMsgListener = null; } super.dispose(); @@ -89,12 +90,11 @@ class _TIMUIKitFileElemState extends TIMUIKitState { } Future addAdvancedMsgListenerForDownload() async { - if(advancedMsgListener != null){ + if (advancedMsgListener != null) { return false; } advancedMsgListener = V2TimAdvancedMsgListener( - onMessageDownloadProgressCallback: - (V2TimMessageDownloadProgress messageProgress) async { + onMessageDownloadProgressCallback: (V2TimMessageDownloadProgress messageProgress) async { if (messageProgress.msgID == widget.message.msgID) { if (messageProgress.isError || messageProgress.errorCode != 0) { setState(() { @@ -117,9 +117,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { } } } else { - final currentProgress = - (messageProgress.currentSize / messageProgress.totalSize * 100) - .floor(); + final currentProgress = (messageProgress.currentSize / messageProgress.totalSize * 100).floor(); if (mounted && currentProgress > downloadProgress) { setState(() { downloadProgress = currentProgress; @@ -129,17 +127,14 @@ class _TIMUIKitFileElemState extends TIMUIKitState { } }, ); - await TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .addAdvancedMsgListener(listener: advancedMsgListener!); + await TencentImSDKPlugin.v2TIMManager.getMessageManager().addAdvancedMsgListener(listener: advancedMsgListener!); return true; } Future getSavePath() async { - String savePathWithAppPath = - '/storage/emulated/0/Android/data/com.tencent.flutter.tuikit/cache/' + - (widget.message.msgID ?? "") + - widget.fileElem!.fileName!; + String savePathWithAppPath = '/storage/emulated/0/Android/data/com.tencent.flutter.tuikit/cache/' + + (widget.message.msgID ?? "") + + widget.fileElem!.fileName!; return savePathWithAppPath; } @@ -147,8 +142,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { if (PlatformUtils().isWeb) { return true; } - String savePath = TencentUtils.checkString( - model.getFileMessageLocation(widget.messageID)) ?? + String savePath = TencentUtils.checkString(model.getFileMessageLocation(widget.messageID)) ?? TencentUtils.checkString(widget.message.fileElem!.localUrl) ?? widget.message.fileElem?.path ?? ''; @@ -166,9 +160,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { model.setMessageProgress(widget.messageID!, 100); } if (advancedMsgListener != null) { - TencentImSDKPlugin.v2TIMManager - .getMessageManager() - .removeAdvancedMsgListener(listener: advancedMsgListener); + TencentImSDKPlugin.v2TIMManager.getMessageManager().removeAdvancedMsgListener(listener: advancedMsgListener); advancedMsgListener = null; } return true; @@ -216,8 +208,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { downloadFile(TUITheme theme) async { if (PlatformUtils().isMobile) { if (PlatformUtils().isIOS) { - if (!await Permissions.checkPermission( - context, Permission.photosAddOnly.value, theme, false)) { + if (!await Permissions.checkPermission(context, Permission.photosAddOnly.value, theme, false)) { return; } } else { @@ -249,18 +240,13 @@ class _TIMUIKitFileElemState extends TIMUIKitState { } tryOpenFile(context, theme) async { - if (!PlatformUtils().isWeb && - (await hasZeroSize(filePath) || widget.message.status == 3)) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: "不支持 0KB 文件的传输", - infoCode: 6660417)); + if (!PlatformUtils().isWeb && (await hasZeroSize(filePath) || widget.message.status == 3)) { + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: "不支持 0KB 文件的传输", infoCode: 6660417)); return; } if (PlatformUtils().isMobile) { if (PlatformUtils().isIOS) { - if (!await Permissions.checkPermission( - context, Permission.photosAddOnly.value, theme!, false)) { + if (!await Permissions.checkPermission(context, Permission.photosAddOnly.value, theme!, false)) { return; } } else { @@ -304,8 +290,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { headers: {'Content-Type': 'application/x-www-form-urlencoded'}, ); - final html.AnchorElement downloadAnchor = - html.document.createElement('a') as html.AnchorElement; + final html.AnchorElement downloadAnchor = html.document.createElement('a') as html.AnchorElement; final html.Blob blob = html.Blob([response.bodyBytes]); @@ -317,8 +302,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { html.AnchorElement( href: widget.fileElem?.path ?? "", ) - ..setAttribute( - "download", widget.message.fileElem?.fileName ?? fileName) + ..setAttribute("download", widget.message.fileElem?.fileName ?? fileName) ..setAttribute("target", '_blank') ..style.display = "none" ..click(); @@ -348,13 +332,11 @@ class _TIMUIKitFileElemState extends TIMUIKitState { bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)); String? fileFormat; - if (widget.fileElem?.fileName != null && - widget.fileElem!.fileName!.isNotEmpty) { + if (widget.fileElem?.fileName != null && widget.fileElem!.fileName!.isNotEmpty) { final String fileName = widget.fileElem!.fileName!; fileFormat = fileName.split(".")[max(fileName.split(".").length - 1, 0)]; } - final RenderBox? containerRenderBox = - containerKey.currentContext?.findRenderObject() as RenderBox?; + final RenderBox? containerRenderBox = containerKey.currentContext?.findRenderObject() as RenderBox?; if (containerRenderBox != null) { containerHeight = containerRenderBox.size.height; } @@ -406,19 +388,15 @@ class _TIMUIKitFileElemState extends TIMUIKitState { if (checkIsWaiting()) { onTIMCallback( TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("已加入待下载队列,其他文件下载中"), - infoCode: 6660413), + type: TIMCallbackType.INFO, infoRecommendText: TIM_t("已加入待下载队列,其他文件下载中"), infoCode: 6660413), ); return; } else { await addUrlToWaitingPath(theme); } } catch (e) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: "文件处理异常", - infoCode: 6660416)); + onTIMCallback( + TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: "文件处理异常", infoCode: 6660416)); } }, child: ConstrainedBox( @@ -427,8 +405,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { width: 170, decoration: BoxDecoration( border: Border.all( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor, + color: theme.weakDividerColor ?? CommonColor.weakDividerColor, ), borderRadius: borderRadius), child: Stack(children: [ @@ -437,28 +414,21 @@ class _TIMUIKitFileElemState extends TIMUIKitState { child: LinearProgressIndicator( minHeight: ((containerHeight) ?? 72) - 6, value: (received == 100 ? 0 : received) / 100, - backgroundColor: received == 100 - ? theme.weakBackgroundColor - : Colors.white, - valueColor: AlwaysStoppedAnimation( - theme.lightPrimaryMaterialColor.shade50), + backgroundColor: received == 100 ? theme.weakBackgroundColor : Colors.white, + valueColor: AlwaysStoppedAnimation(theme.lightPrimaryMaterialColor.shade50), ), ), Padding( - padding: const EdgeInsets.symmetric( - vertical: 8, horizontal: 12), + padding: const EdgeInsets.symmetric(vertical: 8, horizontal: 12), child: Row( - mainAxisAlignment: widget.isSelf - ? MainAxisAlignment.end - : MainAxisAlignment.start, + mainAxisAlignment: widget.isSelf ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ Expanded( child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Container( - constraints: - const BoxConstraints(maxWidth: 160), + constraints: const BoxConstraints(maxWidth: 160), child: LayoutBuilder( builder: (buildContext, boxConstraints) { return CustomText( @@ -476,9 +446,7 @@ class _TIMUIKitFileElemState extends TIMUIKitState { if (fileSize != null) Text( showFileSize(fileSize), - style: TextStyle( - fontSize: 14, - color: theme.weakTextColor), + style: TextStyle(fontSize: 14, color: theme.weakTextColor), ) ], )), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_group_tips_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_group_tips_elem.dart index 493f7ec..472942f 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_group_tips_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_group_tips_elem.dart @@ -1,6 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_tips_elem.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_tips_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_tips_elem.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; @@ -11,15 +13,13 @@ class TIMUIKitGroupTipsElem extends StatefulWidget { final V2TimGroupTipsElem groupTipsElem; final List groupMemberList; - const TIMUIKitGroupTipsElem({Key? key, required this.groupMemberList, required this.groupTipsElem}) - : super(key: key); + const TIMUIKitGroupTipsElem({Key? key, required this.groupMemberList, required this.groupTipsElem}) : super(key: key); @override State createState() => _TIMUIKitGroupTipsElemState(); } class _TIMUIKitGroupTipsElemState extends TIMUIKitState { - String groupTipsAbstractText = ""; @override @@ -45,10 +45,7 @@ class _TIMUIKitGroupTipsElemState extends TIMUIKitState { maxLines: 1, overflow: TextOverflow.ellipsis, textAlign: TextAlign.center, - style: TextStyle( - fontSize: 12, - fontWeight: FontWeight.w400, - color: hexToColor("888888")), + style: TextStyle(fontSize: 12, fontWeight: FontWeight.w400, color: hexToColor("888888")), ), theme); } diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart index 902927f..9daa055 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_image_elem.dart @@ -18,8 +18,10 @@ import 'package:open_file/open_file.dart'; import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_image.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_image.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_image.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.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_state.dart'; @@ -77,9 +79,8 @@ class _TIMUIKitImageElem extends TIMUIKitState { String getOriginImgURL() { // 实际拿的是原图 - V2TimImage? img = MessageUtils.getImageFromImgList( - widget.message.imageElem!.imageList, - HistoryMessageDartConstant.oriImgPrior); + V2TimImage? img = + MessageUtils.getImageFromImgList(widget.message.imageElem!.imageList, HistoryMessageDartConstant.oriImgPrior); return img == null ? widget.message.imageElem!.path! : img.url!; } @@ -128,8 +129,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { final http.Response r = await http.get(Uri.parse(imageUrl)); final data = r.bodyBytes; final base64data = base64Encode(data); - final a = - html.AnchorElement(href: 'data:image/jpeg;base64,$base64data'); + final a = html.AnchorElement(href: 'data:image/jpeg;base64,$base64data'); a.download = md5.convert(utf8.encode(imageUrl)).toString(); a.click(); a.remove(); @@ -140,8 +140,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { } if (PlatformUtils().isIOS) { - if (!await Permissions.checkPermission( - context, Permission.photosAddOnly.value, theme!, false)) { + if (!await Permissions.checkPermission(context, Permission.photosAddOnly.value, theme!, false)) { return; } } else { @@ -177,7 +176,8 @@ class _TIMUIKitImageElem extends TIMUIKitState { if (model.getMessageProgress(widget.message.msgID) == 100) { String savePath; if (widget.message.imageElem!.path != null && - widget.message.imageElem!.path != '' && File(widget.message.imageElem!.path!).existsSync()) { + widget.message.imageElem!.path != '' && + File(widget.message.imageElem!.path!).existsSync()) { savePath = widget.message.imageElem!.path!; } else { savePath = model.getFileMessageLocation(widget.message.msgID); @@ -188,36 +188,26 @@ class _TIMUIKitImageElem extends TIMUIKitState { if (PlatformUtils().isIOS) { if (result['isSuccess']) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存成功"), - infoCode: 6660406)); + onTIMCallback( + TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存成功"), infoCode: 6660406)); } else { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存失败"), - infoCode: 6660407)); + onTIMCallback( + TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存失败"), infoCode: 6660407)); } } else { if (result != null) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存成功"), - infoCode: 6660406)); + onTIMCallback( + TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存成功"), infoCode: 6660406)); } else { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存失败"), - infoCode: 6660407)); + onTIMCallback( + TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存失败"), infoCode: 6660407)); } } return; } } else { onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("the message is downloading"), - infoCode: -1)); + type: TIMCallbackType.INFO, infoRecommendText: TIM_t("the message is downloading"), infoCode: -1)); } return; } @@ -226,27 +216,15 @@ class _TIMUIKitImageElem extends TIMUIKitState { if (PlatformUtils().isIOS) { if (result['isSuccess']) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存成功"), - infoCode: 6660406)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存成功"), infoCode: 6660406)); } else { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存失败"), - infoCode: 6660407)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存失败"), infoCode: 6660407)); } } else { if (result != null) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存成功"), - infoCode: 6660406)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存成功"), infoCode: 6660406)); } else { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("图片保存失败"), - infoCode: 6660407)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("图片保存失败"), infoCode: 6660407)); } } return; @@ -267,8 +245,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { if (!isWeb && filePath != null && File(filePath).existsSync()) { imageUrl = filePath; isAssetBool = true; - } else if (localUrl != null && - (!isWeb && File(localUrl).existsSync())) { + } else if (localUrl != null && (!isWeb && File(localUrl).existsSync())) { imageUrl = localUrl; isAssetBool = true; } else { @@ -286,19 +263,14 @@ class _TIMUIKitImageElem extends TIMUIKitState { ); } } catch (e) { - onTIMCallback(TIMCallback( - infoCode: 6660414, - infoRecommendText: TIM_t("正在下载中"), - type: TIMCallbackType.INFO)); + onTIMCallback(TIMCallback(infoCode: 6660414, infoRecommendText: TIM_t("正在下载中"), type: TIMCallbackType.INFO)); return; } } V2TimImage? getImageFromList(V2TimImageTypesEnum imgType) { - V2TimImage? img = MessageUtils.getImageFromImgList( - widget.message.imageElem!.imageList, - HistoryMessageDartConstant.imgPriorMap[imgType] ?? - HistoryMessageDartConstant.oriImgPrior); + V2TimImage? img = MessageUtils.getImageFromImgList(widget.message.imageElem!.imageList, + HistoryMessageDartConstant.imgPriorMap[imgType] ?? HistoryMessageDartConstant.oriImgPrior); return img; } @@ -322,26 +294,21 @@ class _TIMUIKitImageElem extends TIMUIKitState { )); bool checkIfDownloadSuccess() { - final localUrl = TencentUtils.checkString( - model.getFileMessageLocation(widget.message.msgID)) ?? + final localUrl = TencentUtils.checkString(model.getFileMessageLocation(widget.message.msgID)) ?? widget.message.imageElem!.imageList![0]!.localUrl; - return TencentUtils.checkString(localUrl) != null && - File(localUrl!).existsSync(); + return TencentUtils.checkString(localUrl) != null && File(localUrl!).existsSync(); } _onClickOpenImageInNewWindow() { - final localUrl = TencentUtils.checkString( - model.getFileMessageLocation(widget.message.msgID)) ?? + final localUrl = TencentUtils.checkString(model.getFileMessageLocation(widget.message.msgID)) ?? widget.message.imageElem!.imageList![0]!.localUrl; Future.delayed(const Duration(milliseconds: 0), () async { final isDownloaded = checkIfDownloadSuccess(); if (isDownloaded) { launchDesktopFile(localUrl ?? ""); } else { - onTIMCallback(TIMCallback( - infoCode: 6660414, - infoRecommendText: TIM_t("正在下载原始资源,请稍候..."), - type: TIMCallbackType.INFO)); + onTIMCallback( + TIMCallback(infoCode: 6660414, infoRecommendText: TIM_t("正在下载原始资源,请稍候..."), type: TIMCallbackType.INFO)); } }); } @@ -350,8 +317,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { double? positionRadio, String? originImgUrl, }) { - final localUrl = TencentUtils.checkString( - model.getFileMessageLocation(widget.message.msgID)) ?? + final localUrl = TencentUtils.checkString(model.getFileMessageLocation(widget.message.msgID)) ?? widget.message.imageElem!.imageList![0]!.localUrl; if (checkIfDownloadSuccess()) { TUIKitWidePopup.showMedia( @@ -367,10 +333,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { mediaURL: originImgUrl, onClickOrigin: () => _onClickOpenImageInNewWindow()); } else { - onTIMCallback(TIMCallback( - infoCode: 6660414, - infoRecommendText: TIM_t("正在下载中"), - type: TIMCallbackType.INFO)); + onTIMCallback(TIMCallback(infoCode: 6660414, infoRecommendText: TIM_t("正在下载中"), type: TIMCallbackType.INFO)); } } } @@ -438,9 +401,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { } else { if (PlatformUtils().isDesktop) { TUIKitWidePopup.showMedia( - mediaLocalPath: imgPath, - context: context, - onClickOrigin: () => launchDesktopFile(imgPath ?? "")); + mediaLocalPath: imgPath, context: context, onClickOrigin: () => launchDesktopFile(imgPath ?? "")); } else { Navigator.of(context).push( PageRouteBuilder( @@ -473,26 +434,19 @@ class _TIMUIKitImageElem extends TIMUIKitState { return Hero( tag: heroTag, child: PlatformUtils().isWeb - ? Image.network(webPath ?? smallImg?.url ?? originalImg!.url!, - fit: BoxFit.contain) + ? Image.network(webPath ?? smallImg?.url ?? originalImg!.url!, fit: BoxFit.contain) : CachedNetworkImage( alignment: Alignment.topCenter, imageUrl: webPath ?? smallImg?.url ?? originalImg!.url!, - errorWidget: (context, error, stackTrace) => - errorPage(theme), + errorWidget: (context, error, stackTrace) => errorPage(theme), fit: BoxFit.contain, cacheKey: smallImg?.uuid ?? originalImg!.uuid, - placeholder: (context, url) => - Image(image: MemoryImage(kTransparentImage)), + placeholder: (context, url) => Image(image: MemoryImage(kTransparentImage)), fadeInDuration: const Duration(milliseconds: 0), )); } else { - final imgPath = (TencentUtils.checkString(smallLocalPath) != null - ? smallLocalPath - : originLocalPath)!; - return Hero( - tag: heroTag, - child: Image.file(File(imgPath), fit: BoxFit.contain)); + final imgPath = (TencentUtils.checkString(smallLocalPath) != null ? smallLocalPath : originLocalPath)!; + return Hero(tag: heroTag, child: Image.file(File(imgPath), fit: BoxFit.contain)); } } @@ -522,10 +476,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { heroTag: heroTag, isNetworkImage: isNetworkImage, imgUrl: webPath ?? smallImg?.url ?? originalImg?.url ?? "", - imgPath: (TencentUtils.checkString(originLocalPath) != null - ? originLocalPath - : smallLocalPath) ?? - ""), + imgPath: (TencentUtils.checkString(originLocalPath) != null ? originLocalPath : smallLocalPath) ?? ""), child: Stack( children: [ if (positionRadio != null) @@ -542,50 +493,29 @@ class _TIMUIKitImageElem extends TIMUIKitState { } void initImages() async { - final zeroImageLocal = TencentUtils.checkString(widget - .message.imageElem?.imageList - ?.firstWhereOrNull((element) => element?.type == 0) - ?.localUrl); - final oneImageLocal = TencentUtils.checkString(widget - .message.imageElem?.imageList - ?.firstWhereOrNull((element) => element?.type == 1) - ?.localUrl); - final twoImageLocal = TencentUtils.checkString(widget - .message.imageElem?.imageList - ?.firstWhereOrNull((element) => element?.type == 2) - ?.localUrl); + final zeroImageLocal = TencentUtils.checkString( + widget.message.imageElem?.imageList?.firstWhereOrNull((element) => element?.type == 0)?.localUrl); + final oneImageLocal = TencentUtils.checkString( + widget.message.imageElem?.imageList?.firstWhereOrNull((element) => element?.type == 1)?.localUrl); + final twoImageLocal = TencentUtils.checkString( + widget.message.imageElem?.imageList?.firstWhereOrNull((element) => element?.type == 2)?.localUrl); - if (!PlatformUtils().isWeb && - TencentUtils.checkString(widget.message.msgID) != null) { - if ((widget.message.imageElem?.imageList) == null || - widget.message.imageElem!.imageList!.isEmpty) { - final response = await _messageService.getMessageOnlineUrl( - msgID: widget.message.msgID!); + if (!PlatformUtils().isWeb && TencentUtils.checkString(widget.message.msgID) != null) { + if ((widget.message.imageElem?.imageList) == null || widget.message.imageElem!.imageList!.isEmpty) { + final response = await _messageService.getMessageOnlineUrl(msgID: widget.message.msgID!); final elem = response.data; if (elem != null && elem.imageElem != null) { widget.message.imageElem = elem.imageElem; } } if (oneImageLocal == null || !File(oneImageLocal).existsSync()) { - _messageService.downloadMessage( - msgID: widget.message.msgID!, - messageType: 3, - imageType: 1, - isSnapshot: false); + _messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 3, imageType: 1, isSnapshot: false); } if (twoImageLocal == null || !File(twoImageLocal).existsSync()) { - _messageService.downloadMessage( - msgID: widget.message.msgID!, - messageType: 3, - imageType: 2, - isSnapshot: false); + _messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 3, imageType: 2, isSnapshot: false); } if (zeroImageLocal == null || !File(zeroImageLocal).existsSync()) { - _messageService.downloadMessage( - msgID: widget.message.msgID!, - messageType: 3, - imageType: 0, - isSnapshot: false); + _messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 3, imageType: 0, isSnapshot: false); } } } @@ -596,14 +526,9 @@ class _TIMUIKitImageElem extends TIMUIKitState { initImages(); } - Widget? _renderImage(dynamic heroTag, TUITheme theme, - {V2TimImage? originalImg, V2TimImage? smallImg}) { - + Widget? _renderImage(dynamic heroTag, TUITheme theme, {V2TimImage? originalImg, V2TimImage? smallImg}) { double positionRadio = 1.0; - if (smallImg?.width != null && - smallImg?.height != null && - smallImg?.width != 0 && - smallImg?.height != 0) { + if (smallImg?.width != null && smallImg?.height != null && smallImg?.width != 0 && smallImg?.height != 0) { positionRadio = (smallImg!.width! / smallImg.height!); } @@ -637,10 +562,8 @@ class _TIMUIKitImageElem extends TIMUIKitState { } try { - if ((TencentUtils.checkString(smallImg?.localUrl) != null && - File((smallImg?.localUrl!)!).existsSync()) || - (TencentUtils.checkString(originalImg?.localUrl) != null && - File((originalImg?.localUrl!)!).existsSync())) { + if ((TencentUtils.checkString(smallImg?.localUrl) != null && File((smallImg?.localUrl!)!).existsSync()) || + (TencentUtils.checkString(originalImg?.localUrl) != null && File((originalImg?.localUrl!)!).existsSync())) { return _renderAllImage( smallLocalPath: smallImg?.localUrl ?? "", heroTag: heroTag, @@ -660,8 +583,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { originalImg: originalImg); } - if ((smallImg?.url ?? originalImg?.url) != null && - (smallImg?.url ?? originalImg?.url)!.isNotEmpty) { + if ((smallImg?.url ?? originalImg?.url) != null && (smallImg?.url ?? originalImg?.url)!.isNotEmpty) { return _renderAllImage( heroTag: heroTag, theme: theme, @@ -677,8 +599,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; final heroTag = "${widget.message.msgID ?? widget.message.id ?? widget.message.timestamp ?? DateTime.now().millisecondsSinceEpoch}${widget.isFrom}"; @@ -691,16 +612,14 @@ class _TIMUIKitImageElem extends TIMUIKitState { isFromSelf: widget.message.isSelf ?? true, isShowMessageReaction: widget.isShowMessageReaction ?? true, message: widget.message, - child: LayoutBuilder( - builder: (BuildContext context, BoxConstraints constraints) { + child: LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { return ConstrainedBox( constraints: BoxConstraints( maxWidth: constraints.maxWidth * (isDesktopScreen ? 0.4 : 0.5), minWidth: 64, maxHeight: 256, ), - child: _renderImage(heroTag, theme, - originalImg: originalImg, smallImg: smallImg), + child: _renderImage(heroTag, theme, originalImg: originalImg, smallImg: smallImg), ); })); } @@ -709,9 +628,7 @@ class _TIMUIKitImageElem extends TIMUIKitState { class ImageClipper extends CustomClipper { @override RRect getClip(Size size) { - return RRect.fromRectAndRadius( - Rect.fromLTWH(0, 0, size.width, min(size.height, 256)), - const Radius.circular(5)); + return RRect.fromRectAndRadius(Rect.fromLTWH(0, 0, size.width, min(size.height, 256)), const Radius.circular(5)); } @override diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_reply_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_reply_elem.dart index 5048e04..d3eb40a 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_reply_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_reply_elem.dart @@ -6,7 +6,8 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_model_tools.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/common_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart'; diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_sound_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_sound_elem.dart index 92d8bbb..3ab4dc9 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_sound_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_sound_elem.dart @@ -3,8 +3,10 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:just_audio/just_audio.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_sound_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_sound_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_sound_elem.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -95,7 +97,8 @@ class _TIMUIKitSoundElemState extends TIMUIKitState { } if (!PlatformUtils().isWeb) { if (widget.message.soundElem!.localUrl == null || widget.message.soundElem!.localUrl == '') { - _messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 4, imageType: 0, isSnapshot: false); + _messageService.downloadMessage( + msgID: widget.message.msgID!, messageType: 4, imageType: 0, isSnapshot: false); } } } @@ -172,11 +175,21 @@ class _TIMUIKitSoundElemState extends TIMUIKitState { Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; - final backgroundColor = widget.isFromSelf ? (theme.chatMessageItemFromSelfBgColor ?? theme.lightPrimaryMaterialColor.shade50) : (theme.chatMessageItemFromOthersBgColor); + final backgroundColor = widget.isFromSelf + ? (theme.chatMessageItemFromSelfBgColor ?? theme.lightPrimaryMaterialColor.shade50) + : (theme.chatMessageItemFromOthersBgColor); final borderRadius = widget.isFromSelf - ? const BorderRadius.only(topLeft: Radius.circular(10), topRight: Radius.circular(2), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)) - : const BorderRadius.only(topLeft: Radius.circular(2), topRight: Radius.circular(10), bottomLeft: Radius.circular(10), bottomRight: Radius.circular(10)); + ? const BorderRadius.only( + topLeft: Radius.circular(10), + topRight: Radius.circular(2), + bottomLeft: Radius.circular(10), + bottomRight: Radius.circular(10)) + : const BorderRadius.only( + topLeft: Radius.circular(2), + topRight: Radius.circular(10), + bottomLeft: Radius.circular(10), + bottomRight: Radius.circular(10)); if (widget.isShowJump) { if (!isShining) { Future.delayed(Duration.zero, () { diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart index cb8d400..60e3479 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_elem.dart @@ -1,7 +1,8 @@ import 'dart:async'; import 'dart:convert'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:extended_text/extended_text.dart'; import 'package:flutter/material.dart'; diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_translate_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_translate_elem.dart index 03dd0ca..c1401c0 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_translate_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_text_translate_elem.dart @@ -2,7 +2,8 @@ import 'dart:async'; import 'dart:convert'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:extended_text/extended_text.dart'; import 'package:flutter/material.dart'; diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_video_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_video_elem.dart index fade010..75b81ad 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_video_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_video_elem.dart @@ -6,8 +6,10 @@ import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:open_file/open_file.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_video_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_video_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_video_elem.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_state.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; @@ -80,21 +82,18 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { final current = (DateTime.now().millisecondsSinceEpoch / 1000).ceil(); final timeStamp = widget.message.timestamp ?? current; if (current - timeStamp < 300) { - if (stateElement.snapshotPath != null && - stateElement.snapshotPath != '') { + if (stateElement.snapshotPath != null && stateElement.snapshotPath != '') { File imgF = File(stateElement.snapshotPath!); bool isExist = imgF.existsSync(); if (isExist) { - return Image.file(File(stateElement.snapshotPath!), - fit: BoxFit.fitWidth); + return Image.file(File(stateElement.snapshotPath!), fit: BoxFit.fitWidth); } } } } if ((stateElement.snapshotUrl == null || stateElement.snapshotUrl == '') && - (stateElement.snapshotPath == null || - stateElement.snapshotPath == '')) { + (stateElement.snapshotPath == null || stateElement.snapshotPath == '')) { return Container( decoration: BoxDecoration( borderRadius: const BorderRadius.all(Radius.circular(5)), @@ -120,22 +119,16 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { widget.message.status == MessageStatus.V2TIM_MSG_STATUS_SENDING) ? (stateElement.snapshotPath!.isNotEmpty ? Image.file(File(stateElement.snapshotPath!), fit: BoxFit.fitWidth) - : Image.file(File(stateElement.localSnapshotUrl!), - fit: BoxFit.fitWidth)) - : (PlatformUtils().isWeb || - stateElement.localSnapshotUrl == null || - stateElement.localSnapshotUrl == "") + : Image.file(File(stateElement.localSnapshotUrl!), fit: BoxFit.fitWidth)) + : (PlatformUtils().isWeb || stateElement.localSnapshotUrl == null || stateElement.localSnapshotUrl == "") ? Image.network(stateElement.snapshotUrl!, fit: BoxFit.fitWidth) - : Image.file(File(stateElement.localSnapshotUrl!), - fit: BoxFit.fitWidth); + : Image.file(File(stateElement.localSnapshotUrl!), fit: BoxFit.fitWidth); } downloadMessageDetailAndSave() async { if (TencentUtils.checkString(widget.message.msgID) != null) { - if (TencentUtils.checkString(widget.message.videoElem!.videoUrl) == - null) { - final response = await _messageService.getMessageOnlineUrl( - msgID: widget.message.msgID!); + if (TencentUtils.checkString(widget.message.videoElem!.videoUrl) == null) { + final response = await _messageService.getMessageOnlineUrl(msgID: widget.message.msgID!); if (response.data != null) { widget.message.videoElem = response.data!.videoElem; Future.delayed(const Duration(microseconds: 10), () { @@ -144,24 +137,14 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { } } if (!PlatformUtils().isWeb) { - if (TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) == - null || + if (TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) == null || !File(widget.message.videoElem!.localVideoUrl!).existsSync()) { _messageService.downloadMessage( - msgID: widget.message.msgID!, - messageType: 5, - imageType: 0, - isSnapshot: false); + msgID: widget.message.msgID!, messageType: 5, imageType: 0, isSnapshot: false); } - if (TencentUtils.checkString( - widget.message.videoElem!.localSnapshotUrl) == - null || + if (TencentUtils.checkString(widget.message.videoElem!.localSnapshotUrl) == null || !File(widget.message.videoElem!.localSnapshotUrl!).existsSync()) { - _messageService.downloadMessage( - msgID: widget.message.msgID!, - messageType: 5, - imageType: 0, - isSnapshot: true); + _messageService.downloadMessage(msgID: widget.message.msgID!, messageType: 5, imageType: 0, isSnapshot: true); } } } @@ -181,7 +164,6 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { } } - @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; @@ -196,16 +178,15 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { context: context, mediaURL: url, onClickOrigin: () => launchUrl( - Uri.parse(url), - mode: LaunchMode.externalApplication, - )); + Uri.parse(url), + mode: LaunchMode.externalApplication, + )); return; } if (PlatformUtils().isDesktop) { final videoElem = widget.message.videoElem; if (videoElem != null) { - final localVideoUrl = - TencentUtils.checkString(videoElem.localVideoUrl); + final localVideoUrl = TencentUtils.checkString(videoElem.localVideoUrl); final videoPath = TencentUtils.checkString(videoElem.videoPath); final videoUrl = videoElem.videoUrl; if (localVideoUrl != null) { @@ -223,10 +204,8 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { // mediaPath: videoPath, // onClickOrigin: () => launchDesktopFile(videoPath)); } else if (TencentUtils.isTextNotEmpty(videoUrl)) { - onTIMCallback(TIMCallback( - infoCode: 6660414, - infoRecommendText: TIM_t("正在下载中"), - type: TIMCallbackType.INFO)); + onTIMCallback( + TIMCallback(infoCode: 6660414, infoRecommendText: TIM_t("正在下载中"), type: TIMCallbackType.INFO)); } } } else { @@ -253,67 +232,50 @@ class _TIMUIKitVideoElemState extends TIMUIKitState { isFromSelf: widget.message.isSelf ?? true, child: ClipRRect( borderRadius: const BorderRadius.all(Radius.circular(5)), - child: LayoutBuilder(builder: - (BuildContext context, BoxConstraints constraints) { + child: LayoutBuilder(builder: (BuildContext context, BoxConstraints constraints) { double? positionRadio; if ((stateElement.snapshotWidth) != null && stateElement.snapshotHeight != null && stateElement.snapshotWidth != 0 && stateElement.snapshotHeight != 0) { - positionRadio = (stateElement.snapshotWidth! / - stateElement.snapshotHeight!); + positionRadio = (stateElement.snapshotWidth! / stateElement.snapshotHeight!); } return ConstrainedBox( constraints: BoxConstraints( - maxWidth: PlatformUtils().isWeb - ? 300 - : constraints.maxWidth * 0.5, + maxWidth: PlatformUtils().isWeb ? 300 : constraints.maxWidth * 0.5, maxHeight: min(constraints.maxHeight * 0.8, 300), minHeight: 20, minWidth: 20), child: Stack( children: [ if (positionRadio != null && - (stateElement.snapshotUrl != null || - stateElement.snapshotUrl != null)) + (stateElement.snapshotUrl != null || stateElement.snapshotUrl != null)) AspectRatio( aspectRatio: positionRadio, child: Container( - decoration: const BoxDecoration( - color: Colors.transparent), + decoration: const BoxDecoration(color: Colors.transparent), ), ), Row( - children: [ - Expanded( - child: generateSnapshot(theme, - stateElement.snapshotHeight ?? 100)) - ], + children: [Expanded(child: generateSnapshot(theme, stateElement.snapshotHeight ?? 100))], ), - if (widget.message.status != - MessageStatus.V2TIM_MSG_STATUS_SENDING && - (stateElement.snapshotUrl != null || - stateElement.snapshotPath != null) && + if (widget.message.status != MessageStatus.V2TIM_MSG_STATUS_SENDING && + (stateElement.snapshotUrl != null || stateElement.snapshotPath != null) && stateElement.videoPath != null || stateElement.videoUrl != null) Positioned.fill( // alignment: Alignment.center, child: Center( - child: Image.asset('images/play.png', - package: 'tencent_cloud_chat_uikit', - height: 64)), + child: + Image.asset('images/play.png', package: 'tencent_cloud_chat_uikit', height: 64)), ), - if (widget.message.videoElem?.duration != null && - widget.message.videoElem!.duration! > 0) + if (widget.message.videoElem?.duration != null && widget.message.videoElem!.duration! > 0) Positioned( right: 10, bottom: 10, child: Text( - MessageUtils.formatVideoTime(widget - .message.videoElem!.duration!) - .toString(), - style: const TextStyle( - color: Colors.white, fontSize: 12))), + MessageUtils.formatVideoTime(widget.message.videoElem!.duration!).toString(), + style: const TextStyle(color: Colors.white, fontSize: 12))), ], )); }), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_videoplayer.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_videoplayer.dart index e6298c4..0378da5 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_videoplayer.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_chat_videoplayer.dart @@ -4,9 +4,12 @@ import 'package:flutter/foundation.dart'; import 'package:flutter/material.dart'; import 'package:better_player_plus/better_player_plus.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_online_url.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_online_url.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_online_url.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; @@ -83,9 +86,9 @@ class TIMUIKitVideoPlayerState extends State { enableProgressBar: true, enableProgressText: true, showControlsOnInitialize: false, - enableMute:false, - enableOverflowMenu:false, - enableSkips:false, + enableMute: false, + enableOverflowMenu: false, + enableSkips: false, ), ); @@ -95,8 +98,7 @@ class TIMUIKitVideoPlayerState extends State { ); if (mounted) { - setState(() { - }); + setState(() {}); } } } catch (e) { @@ -134,13 +136,15 @@ class TIMUIKitVideoPlayerState extends State { // 先查本地发送的视频地址 if (File(widget.message.videoElem!.videoPath!).existsSync()) { console("video: local video path exists"); - return CurrentVideoInfo(path: widget.message.videoElem!.videoPath!, type: CurrentVideoType.local, aspectRatio: aspectRatio); + return CurrentVideoInfo( + path: widget.message.videoElem!.videoPath!, type: CurrentVideoType.local, aspectRatio: aspectRatio); } } else if (TencentUtils.checkString(widget.message.videoElem!.localVideoUrl) != null) { // 再查本地下载的视频地址 if (File(widget.message.videoElem!.localVideoUrl!).existsSync()) { console("video: local url exists"); - return CurrentVideoInfo(path: widget.message.videoElem!.localVideoUrl!, type: CurrentVideoType.local, aspectRatio: aspectRatio); + return CurrentVideoInfo( + path: widget.message.videoElem!.localVideoUrl!, type: CurrentVideoType.local, aspectRatio: aspectRatio); } } else { // 最后再查在线地址(todo 使用 getMessageOnlineUrl 查询) @@ -155,12 +159,15 @@ class TIMUIKitVideoPlayerState extends State { } } if (!kIsWeb) { - V2TimValueCallback urlres = await TencentImSDKPlugin.v2TIMManager.getMessageManager().getMessageOnlineUrl(msgID: widget.message.msgID ?? ""); + V2TimValueCallback urlres = await TencentImSDKPlugin.v2TIMManager + .getMessageManager() + .getMessageOnlineUrl(msgID: widget.message.msgID ?? ""); if (urlres.data != null) { if (urlres.data?.videoElem != null) { if (TencentUtils.checkString(urlres.data?.videoElem?.videoUrl) != null) { console("view video online url ${urlres.data?.videoElem?.videoUrl}"); - return CurrentVideoInfo(path: urlres.data!.videoElem!.videoUrl!, type: CurrentVideoType.online, aspectRatio: aspectRatio); + return CurrentVideoInfo( + path: urlres.data!.videoElem!.videoUrl!, type: CurrentVideoType.online, aspectRatio: aspectRatio); } } } @@ -199,4 +206,4 @@ class TIMUIKitVideoPlayerState extends State { ), ); } -} \ No newline at end of file +} diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart index 74180e6..9142e00 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitMessageItem/tim_uikit_merger_message_elem.dart @@ -2,8 +2,10 @@ import 'dart:async'; import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_merger_elem.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_merger_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_merger_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/core/tim_uikit_wide_modal_operation_key.dart'; @@ -81,8 +83,7 @@ class TIMUIKitMergerElemState extends TIMUIKitState { _handleTap(BuildContext context, TUIChatSeparateViewModel model) async { try { if (widget.messageID != "") { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (isDesktopScreen) { TUIKitWidePopup.showPopupWindow( @@ -94,9 +95,7 @@ class TIMUIKitMergerElemState extends TIMUIKitState { child: (onClose) => Scrollbar( controller: _scrollController, child: MergerMessageScreen( - messageItemBuilder: widget.messageItemBuilder, - model: model, - msgID: widget.messageID), + messageItemBuilder: widget.messageItemBuilder, model: model, msgID: widget.messageID), ), ); } else { @@ -104,17 +103,12 @@ class TIMUIKitMergerElemState extends TIMUIKitState { context, MaterialPageRoute( builder: (context) => MergerMessageScreen( - messageItemBuilder: widget.messageItemBuilder, - model: model, - msgID: widget.messageID), + messageItemBuilder: widget.messageItemBuilder, model: model, msgID: widget.messageID), )); } } } catch (e) { - onTIMCallback(TIMCallback( - type: TIMCallbackType.INFO, - infoRecommendText: TIM_t("无法定位到原消息"), - infoCode: 6660401)); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("无法定位到原消息"), infoCode: 6660401)); } } @@ -134,12 +128,9 @@ class TIMUIKitMergerElemState extends TIMUIKitState { _showJumpColor(); }); } - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return Container( - constraints: BoxConstraints( - maxWidth: - MediaQuery.of(context).size.width * (isDesktopScreen ? 0.3 : 0.6)), + constraints: BoxConstraints(maxWidth: MediaQuery.of(context).size.width * (isDesktopScreen ? 0.3 : 0.6)), decoration: BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( @@ -221,8 +212,7 @@ class TIMUIKitMergerElemState extends TIMUIKitState { fontSize: 10, ), ), - if (widget.isShowMessageReaction ?? true) - TIMUIKitMessageReactionShowPanel(message: widget.message) + if (widget.isShowMessageReaction ?? true) TIMUIKitMessageReactionShowPanel(message: widget.message) ], ), ), diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/at_member_panel.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/at_member_panel.dart index 8f6d9a3..c0f7d72 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/at_member_panel.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/at_member_panel.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -39,8 +40,7 @@ class _AtMemberPanelState extends TIMUIKitState { Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; final chatModal = Provider.of(context); - final List groupMemberList = - chatModal.showAtMemberList; + final List groupMemberList = chatModal.showAtMemberList; final double positionX = chatModal.atPositionX; final double positionY = chatModal.atPositionY; final int activeIndex = chatModal.activeAtIndex; @@ -67,10 +67,7 @@ class _AtMemberPanelState extends TIMUIKitState { itemBuilder: ((context, index) { final memberItem = groupMemberList[index]; if (memberItem == null) { - return AutoScrollTag( - key: ValueKey(index), - controller: widget.atMemberPanelScroll, - index: index); + return AutoScrollTag(key: ValueKey(index), controller: widget.atMemberPanelScroll, index: index); } final showName = _getShowName(memberItem); final isAtAll = memberItem.userID == "__kImSDK_MesssageAtALL__"; @@ -86,11 +83,8 @@ class _AtMemberPanelState extends TIMUIKitState { widget.onSelectMember(memberItem); }, child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 8, vertical: 4), - color: activeIndex == index - ? theme.weakBackgroundColor - : theme.wideBackgroundColor, + padding: const EdgeInsets.symmetric(horizontal: 8, vertical: 4), + color: activeIndex == index ? theme.weakBackgroundColor : theme.wideBackgroundColor, child: Row( mainAxisSize: MainAxisSize.min, mainAxisAlignment: MainAxisAlignment.start, @@ -98,28 +92,22 @@ class _AtMemberPanelState extends TIMUIKitState { SizedBox( height: 24, width: 24, - child: Avatar( - faceUrl: memberItem.faceUrl ?? "", - type: 1, - showName: showName), + child: Avatar(faceUrl: memberItem.faceUrl ?? "", type: 1, showName: showName), ), const SizedBox( width: 8, ), - Expanded(child: Text( - isAtAll - ? "$showName(${groupMemberList.length - 1})" - : showName, + Expanded( + child: Text( + isAtAll ? "$showName(${groupMemberList.length - 1})" : showName, softWrap: false, style: TextStyle( fontSize: 14, overflow: TextOverflow.ellipsis, - fontWeight: memberItem.role == 400 || - memberItem.role == 300 + fontWeight: memberItem.role == 400 || memberItem.role == 300 ? FontWeight.w500 : FontWeight.normal, - color: memberItem.role == 400 || - memberItem.role == 300 + color: memberItem.role == 400 || memberItem.role == 300 ? theme.primaryColor : theme.darkTextColor), )) diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_at_text.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_at_text.dart index 0fa06a3..f58ec66 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_at_text.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_at_text.dart @@ -1,11 +1,17 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; +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_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_self_info_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/group/group_services.dart'; @@ -78,8 +84,7 @@ class _AtTextState extends TIMUIKitState { Future> searchGroupMember( V2TimGroupMemberSearchParam searchParam) async { - final res = - await _groupServices.searchGroupMembers(searchParam: searchParam); + final res = await _groupServices.searchGroupMembers(searchParam: searchParam); if (res.code == 0) {} return res; @@ -105,8 +110,7 @@ class _AtTextState extends TIMUIKitState { } setState(() { - searchMemberList = - isSearchTextExist(searchText) ? searchMemberList : groupMemberList; + searchMemberList = isSearchTextExist(searchText) ? searchMemberList : groupMemberList; }); } @@ -148,8 +152,7 @@ class _AtTextState extends TIMUIKitState { customTopArea: PlatformUtils().isWeb ? null : GroupMemberSearchTextField( - onTextChange: (text) => - handleSearchGroupMembers(text, context), + onTextChange: (text) => handleSearchGroupMembers(text, context), )); } @@ -196,7 +199,7 @@ class _AtTextState extends TIMUIKitState { _submitAtMemberList(); }, child: Text( - TIM_t("确定"), + TIM_t("确定"), style: TextStyle( color: theme.appbarTextColor, fontSize: 14, diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_call_invite_list.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_call_invite_list.dart index bce79d4..78b46fe 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_call_invite_list.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_call_invite_list.dart @@ -2,10 +2,14 @@ import 'package:flutter/material.dart'; import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_filter_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.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_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_value_callback.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/data_services/group/group_services.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; @@ -56,16 +60,13 @@ class _SelectCallInviterState extends TIMUIKitState { return searchText != null && searchText != ""; } - Future _loadGroupMemberList( - {required String groupID, int count = 100, String? seq}) async { + Future _loadGroupMemberList({required String groupID, int count = 100, String? seq}) async { if (seq == null || seq == "" || seq == "0") { _groupMemberList = []; } - final String? nextSeq = await _loadGroupMemberListFunction( - groupID: groupID, seq: seq, count: count); + final String? nextSeq = await _loadGroupMemberListFunction(groupID: groupID, seq: seq, count: count); if (nextSeq != null && nextSeq != "0" && nextSeq != "") { - return await _loadGroupMemberList( - groupID: groupID, count: count, seq: nextSeq); + return await _loadGroupMemberList(groupID: groupID, count: count, seq: nextSeq); } else { setState(() { _groupMemberList = _groupMemberList; @@ -75,8 +76,7 @@ class _SelectCallInviterState extends TIMUIKitState { } } - Future _loadGroupMemberListFunction( - {required String groupID, int count = 100, String? seq}) async { + Future _loadGroupMemberListFunction({required String groupID, int count = 100, String? seq}) async { if (seq == "0") { _groupMemberList?.clear(); } @@ -96,8 +96,7 @@ class _SelectCallInviterState extends TIMUIKitState { Future> searchGroupMember( V2TimGroupMemberSearchParam searchParam) async { - final res = - await _groupServices.searchGroupMembers(searchParam: searchParam); + final res = await _groupServices.searchGroupMembers(searchParam: searchParam); if (res.code == 0) {} return res; @@ -131,8 +130,7 @@ class _SelectCallInviterState extends TIMUIKitState { } setState(() { loading = false; - searchMemberList = - isSearchTextExist(searchText) ? currentGroupMember : _groupMemberList; + searchMemberList = isSearchTextExist(searchText) ? currentGroupMember : _groupMemberList; }); } @@ -146,8 +144,7 @@ class _SelectCallInviterState extends TIMUIKitState { iconTheme: IconThemeData( color: theme.appbarTextColor, ), - backgroundColor: theme.appbarBgColor ?? - theme.primaryColor, + backgroundColor: theme.appbarBgColor ?? theme.primaryColor, leading: TextButton( onPressed: () { Navigator.pop(context); @@ -191,12 +188,10 @@ class _SelectCallInviterState extends TIMUIKitState { customTopArea: PlatformUtils().isWeb ? null : GroupMemberSearchTextField( - onTextChange: (text) => - handleSearchGroupMembers(text, context), + onTextChange: (text) => handleSearchGroupMembers(text, context), ), memberList: (searchMemberList ?? []) - .where((element) => - element?.userID != _coreServicesImpl.loginInfo.userID) + .where((element) => element?.userID != _coreServicesImpl.loginInfo.userID) .toList(), canSlideDelete: false, canSelectMember: true, diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart index ad1b8e5..229e35b 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_more_panel.dart @@ -12,7 +12,8 @@ import 'package:file_picker/file_picker.dart'; import 'package:path_provider/path_provider.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_call_invite_list.dart'; import 'package:video_player/video_player.dart'; @@ -475,14 +476,12 @@ class _MorePanelState extends TIMUIKitState { final size = await originFile!.length(); if (!isVideo) { if (size >= MorePanelConfig.IMAGE_MAX_SIZE) { - onTIMCallback( - TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("文件大小超出了限制"))); + onTIMCallback(TIMCallback(type: TIMCallbackType.INFO, infoRecommendText: TIM_t("文件大小超出了限制"))); return; } MessageUtils.handleMessageError( - model.sendImageMessage(imagePath: originFile.path, convID: convID, convType: convType), - context); + model.sendImageMessage(imagePath: originFile.path, convID: convID, convType: convType), context); } else { // 监听视频准备完成事件 _betterPlayerController.addEventsListener((event) { diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart index da7d61c..aeee4f4 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field.dart @@ -9,9 +9,12 @@ import 'package:provider/provider.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -167,7 +170,11 @@ class _InputTextFieldState extends TIMUIKitState { baseUrl: "assets/custom_face_resource/${tccEmojiSet.name}", isEmoji: tccEmojiSet.isEmoji, isDefaultEmoji: true, - stickerList: tccEmojiSet.list.asMap().keys.map((idx) => CustomSticker(index: idx, name: tccEmojiSet.list[idx])).toList(), + stickerList: tccEmojiSet.list + .asMap() + .keys + .map((idx) => CustomSticker(index: idx, name: tccEmojiSet.list[idx])) + .toList(), menuItem: CustomSticker( index: 0, name: tccEmojiSet.icon, @@ -181,7 +188,8 @@ class _InputTextFieldState extends TIMUIKitState { baseUrl: "assets/custom_face_resource/${qqEmojiSet.name}", isEmoji: qqEmojiSet.isEmoji, isDefaultEmoji: true, - stickerList: qqEmojiSet.list.asMap().keys.map((idx) => CustomSticker(index: idx, name: qqEmojiSet.list[idx])).toList(), + stickerList: + qqEmojiSet.list.asMap().keys.map((idx) => CustomSticker(index: idx, name: qqEmojiSet.list[idx])).toList(), menuItem: CustomSticker( index: 0, name: qqEmojiSet.icon, @@ -192,7 +200,8 @@ class _InputTextFieldState extends TIMUIKitState { final defEmojiList = TUIKitStickerConstData.defaultUnicodeEmojiList.map((emojiItem) { return CustomSticker(index: 0, name: emojiItem.toString(), unicode: emojiItem); }).toList(); - stickerPackageList.add(CustomStickerPackage(name: "defaultEmoji", stickerList: defEmojiList, menuItem: defEmojiList[0])); + stickerPackageList + .add(CustomStickerPackage(name: "defaultEmoji", stickerList: defEmojiList, menuItem: defEmojiList[0])); } stickerPackageList.addAll(stickerConfig.customStickerPackages); @@ -242,7 +251,8 @@ class _InputTextFieldState extends TIMUIKitState { textEditingController.text = text; if (TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop) { - textEditingController.selection = TextSelection.fromPosition(TextPosition(offset: currentCursor ?? textEditingController.text.length)); + textEditingController.selection = + TextSelection.fromPosition(TextPosition(offset: currentCursor ?? textEditingController.text.length)); focusNode.requestFocus(); } } @@ -273,7 +283,8 @@ class _InputTextFieldState extends TIMUIKitState { } if (TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop) { - textEditingController.selection = TextSelection.fromPosition(TextPosition(offset: currentCursor ?? textEditingController.text.length)); + textEditingController.selection = + TextSelection.fromPosition(TextPosition(offset: currentCursor ?? textEditingController.text.length)); focusNode.requestFocus(); } } @@ -286,9 +297,18 @@ class _InputTextFieldState extends TIMUIKitState { String text = textEditingController.text; String convID = id ?? widget.conversationID; final isTopic = convID.contains("@TOPIC#"); - String conversationID = isTopic ? convID : ((convType ?? widget.conversationType) == ConvType.c2c ? "${TUIConversationViewModel.conversationC2CPrefix}$convID" : "${TUIConversationViewModel.conversationGroupPrefix}$convID"); + String conversationID = isTopic + ? convID + : ((convType ?? widget.conversationType) == ConvType.c2c + ? "${TUIConversationViewModel.conversationC2CPrefix}$convID" + : "${TUIConversationViewModel.conversationGroupPrefix}$convID"); String draftText = _filterU200b(text); - return await conversationModel.setConversationDraft(groupID: groupID ?? widget.groupID, isTopic: isTopic, isAllowWeb: widget.model.chatConfig.isUseDraftOnWeb, conversationID: conversationID, draftText: draftText); + return await conversationModel.setConversationDraft( + groupID: groupID ?? widget.groupID, + isTopic: isTopic, + isAllowWeb: widget.model.chatConfig.isUseDraftOnWeb, + conversationID: conversationID, + draftText: draftText); } // 和onSubmitted一样,只是保持焦点的不同 @@ -346,9 +366,13 @@ class _InputTextFieldState extends TIMUIKitState { } if (widget.model.repliedMessage != null) { - MessageUtils.handleMessageError(widget.model.sendFaceMessage(index: groupID, data: data, convID: widget.conversationID, convType: convType), context); + MessageUtils.handleMessageError( + widget.model.sendFaceMessage(index: groupID, data: data, convID: widget.conversationID, convType: convType), + context); } else { - MessageUtils.handleMessageError(widget.model.sendFaceMessage(index: groupID, data: data, convID: widget.conversationID, convType: convType), context); + MessageUtils.handleMessageError( + widget.model.sendFaceMessage(index: groupID, data: data, convID: widget.conversationID, convType: convType), + context); } } @@ -368,11 +392,22 @@ class _InputTextFieldState extends TIMUIKitState { final convType = widget.conversationType; if (text.isNotEmpty && text != zeroWidthSpace) { if (widget.model.repliedMessage != null) { - MessageUtils.handleMessageError(widget.model.sendReplyMessage(text: text, convID: widget.conversationID, convType: convType, atUserIDList: getUserIdFromMemberInfoMap()), context); + MessageUtils.handleMessageError( + widget.model.sendReplyMessage( + text: text, + convID: widget.conversationID, + convType: convType, + atUserIDList: getUserIdFromMemberInfoMap()), + context); } else if (mentionedMembersMap.isNotEmpty) { - widget.model.sendTextAtMessage(text: text, convType: widget.conversationType, convID: widget.conversationID, atUserList: getUserIdFromMemberInfoMap()); + widget.model.sendTextAtMessage( + text: text, + convType: widget.conversationType, + convID: widget.conversationID, + atUserList: getUserIdFromMemberInfoMap()); } else { - MessageUtils.handleMessageError(widget.model.sendTextMessage(text: text, convID: widget.conversationID, convType: convType), context); + MessageUtils.handleMessageError( + widget.model.sendTextMessage(text: text, convID: widget.conversationID, convType: convType), context); } textEditingController.clear(); currentCursor = null; @@ -414,7 +449,10 @@ class _InputTextFieldState extends TIMUIKitState { } String _getShowName(V2TimGroupMemberFullInfo? item) { - return TencentUtils.checkStringWithoutSpace(item?.nameCard) ?? TencentUtils.checkStringWithoutSpace(item?.nickName) ?? TencentUtils.checkStringWithoutSpace(item?.userID) ?? ""; + return TencentUtils.checkStringWithoutSpace(item?.nameCard) ?? + TencentUtils.checkStringWithoutSpace(item?.nickName) ?? + TencentUtils.checkStringWithoutSpace(item?.userID) ?? + ""; } mentionMemberInMessage(String? userID, String? nickName) { @@ -558,10 +596,10 @@ class _InputTextFieldState extends TIMUIKitState { } final int selfRole = widget.model.selfMemberInfo?.role ?? 0; - final bool canAtAll = widget.model.chatConfig.isMemberCanAtAll ? true : (selfRole == GroupMemberRoleType - .V2TIM_GROUP_MEMBER_ROLE_ADMIN || selfRole - == - GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); + final bool canAtAll = widget.model.chatConfig.isMemberCanAtAll + ? true + : (selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN || + selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); if (isDesktopScreen) { (int, String, bool)? changedCharacterRecord = findChangedCharacter(originalText, text); @@ -598,7 +636,10 @@ class _InputTextFieldState extends TIMUIKitState { "") .toLowerCase(); keyword ??= ""; - return element != null && showName.contains(keyword!.toLowerCase()) && TencentUtils.checkString(showName) != null && element.userID != widget.model.selfMemberInfo?.userID; + return element != null && + showName.contains(keyword!.toLowerCase()) && + TencentUtils.checkString(showName) != null && + element.userID != widget.model.selfMemberInfo?.userID; }) .whereType() .toList(); @@ -626,7 +667,10 @@ class _InputTextFieldState extends TIMUIKitState { keyword ??= ""; if (canAtAll && showAtMemberList.isNotEmpty && keyword!.isEmpty) { - showAtMemberList = [V2TimGroupMemberFullInfo(userID: "__kImSDK_MesssageAtALL__", nickName: TIM_t("所有人")), ...showAtMemberList]; + showAtMemberList = [ + V2TimGroupMemberFullInfo(userID: "__kImSDK_MesssageAtALL__", nickName: TIM_t("所有人")), + ...showAtMemberList + ]; } model.activeAtIndex = 0; @@ -642,7 +686,12 @@ class _InputTextFieldState extends TIMUIKitState { List selectedAtMemberList = await Navigator.push( context, MaterialPageRoute( - builder: (context) => AtText(groupMemberList: model.groupMemberList, groupInfo: model.groupInfo, groupID: groupID, canAtAll: canAtAll, groupType: widget.groupType), + builder: (context) => AtText( + groupMemberList: model.groupMemberList, + groupInfo: model.groupInfo, + groupID: groupID, + canAtAll: canAtAll, + groupType: widget.groupType), ), ); @@ -687,14 +736,16 @@ class _InputTextFieldState extends TIMUIKitState { KeyEventResult handleDesktopKeyEvent(FocusNode node, RawKeyEvent event) { final activeIndex = widget.model.activeAtIndex; final showMemberList = widget.model.showAtMemberList; - final isPressEnter = (event.physicalKey == PhysicalKeyboardKey.enter) || (event.physicalKey == PhysicalKeyboardKey.numpadEnter); + final isPressEnter = + (event.physicalKey == PhysicalKeyboardKey.enter) || (event.physicalKey == PhysicalKeyboardKey.numpadEnter); if (event.runtimeType == RawKeyDownEvent) { if (event.physicalKey == PhysicalKeyboardKey.backspace) { if (textEditingController.text.isEmpty && lastText.isEmpty) { widget.model.repliedMessage = null; return KeyEventResult.handled; } - } else if ((event.isShiftPressed || event.isAltPressed || event.isControlPressed || event.isMetaPressed) && isPressEnter) { + } else if ((event.isShiftPressed || event.isAltPressed || event.isControlPressed || event.isMetaPressed) && + isPressEnter) { final offset = textEditingController.selection.baseOffset; textEditingController.text = '${lastText.substring(0, offset)}\n${lastText.substring(offset)}'; textEditingController.selection = TextSelection.fromPosition(TextPosition(offset: offset + 1)); @@ -766,7 +817,8 @@ class _InputTextFieldState extends TIMUIKitState { } else if (actionType == ActionType.setTextField) { final newText = widget.controller?.inputText ?? ""; textEditingController.text = newText; - textEditingController.selection = TextSelection.fromPosition(TextPosition(offset: textEditingController.text.length)); + textEditingController.selection = + TextSelection.fromPosition(TextPosition(offset: textEditingController.text.length)); lastText = textEditingController.text; focusNode.requestFocus(); return; @@ -784,7 +836,8 @@ class _InputTextFieldState extends TIMUIKitState { super.didUpdateWidget(oldWidget); if (widget.conversationID != oldWidget.conversationID) { mentionedMembersMap.clear(); - handleSetDraftText(id: oldWidget.conversationID, convType: oldWidget.conversationType, groupID: oldWidget.groupID); + handleSetDraftText( + id: oldWidget.conversationID, convType: oldWidget.conversationType, groupID: oldWidget.groupID); if (oldWidget.initText != widget.initText) { textEditingController.text = widget.initText ?? ""; } else { @@ -810,7 +863,8 @@ class _InputTextFieldState extends TIMUIKitState { Future getMemberMuteStatus(String userID) async { // Get the mute state of the members recursively if (widget.model.groupMemberList?.any((item) => (item?.userID == userID)) ?? false) { - final int muteUntil = widget.model.groupMemberList?.firstWhere((item) => (item?.userID == userID))?.muteUntil ?? 0; + final int muteUntil = + widget.model.groupMemberList?.firstWhere((item) => (item?.userID == userID))?.muteUntil ?? 0; return muteUntil * 1000 > DateTime.now().millisecondsSinceEpoch; } else { return false; @@ -823,7 +877,8 @@ class _InputTextFieldState extends TIMUIKitState { } final int selfRole = widget.model.selfMemberInfo?.role ?? 0; - final bool willNotBeenMuted = (selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN || selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); + final bool willNotBeenMuted = (selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN || + selfRole == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER); if (widget.conversationType == ConvType.group && !willNotBeenMuted) { if ((model.groupInfo?.isAllMuted ?? false) && muteStatus != MuteStatus.all) { @@ -832,13 +887,17 @@ class _InputTextFieldState extends TIMUIKitState { muteStatus = MuteStatus.all; }); }); - } else if (selfModel.loginInfo?.userID != null && await getMemberMuteStatus(selfModel.loginInfo!.userID!) && muteStatus != MuteStatus.me) { + } else if (selfModel.loginInfo?.userID != null && + await getMemberMuteStatus(selfModel.loginInfo!.userID!) && + muteStatus != MuteStatus.me) { Future.delayed(const Duration(seconds: 0), () { setState(() { muteStatus = MuteStatus.me; }); }); - } else if (!(model.groupInfo?.isAllMuted ?? false) && !(selfModel.loginInfo?.userID != null && await getMemberMuteStatus(selfModel.loginInfo!.userID!)) && muteStatus != MuteStatus.none) { + } else if (!(model.groupInfo?.isAllMuted ?? false) && + !(selfModel.loginInfo?.userID != null && await getMemberMuteStatus(selfModel.loginInfo!.userID!)) && + muteStatus != MuteStatus.none) { Future.delayed(const Duration(seconds: 0), () { setState(() { muteStatus = MuteStatus.none; diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_controller.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_controller.dart index 929551b..73dd09c 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_controller.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_controller.dart @@ -1,13 +1,8 @@ import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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'; -enum ActionType { - hideAllPanel, - longPressToAt, - setTextField, - requestFocus, - handleAtMember -} +enum ActionType { hideAllPanel, longPressToAt, setTextField, requestFocus, handleAtMember } class TIMUIKitInputTextFieldController extends ChangeNotifier { TextEditingController? textEditingController = TextEditingController(); diff --git a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart index 6d929e9..5400a65 100644 --- a/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart +++ b/lib/ui/views/TIMUIKitChat/TIMUIKitTextField/tim_uikit_text_field_layout/narrow.dart @@ -6,7 +6,8 @@ import 'package:flutter/material.dart'; import 'package:flutter/services.dart'; import 'package:flutter_svg/svg.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -260,7 +261,10 @@ class _TIMUIKitTextFieldLayoutNarrowState extends TIMUIKitState { updateDraft() async { final isTopic = widget.conversation.conversationID.contains("@TOPIC#"); if (isTopic) { - final topicInfoList = await TencentImSDKPlugin.v2TIMManager.getGroupManager().getTopicInfoList(groupID: widget.groupID!, topicIDList: [widget.conversation.conversationID]); + final topicInfoList = await TencentImSDKPlugin.v2TIMManager + .getGroupManager() + .getTopicInfoList(groupID: widget.groupID!, topicIDList: [widget.conversation.conversationID]); final topicInfo = topicInfoList.data?.first.topicInfo; final draftText = topicInfo?.draftText; if (TencentUtils.checkString(draftText) != null) { @@ -349,7 +361,9 @@ class _TUIChatState extends TIMUIKitState { } String _getConvID() { - return TencentUtils.checkString(widget.conversationID) ?? (widget.conversation.type == 1 ? widget.conversation.userID : widget.conversation.groupID) ?? ""; + return TencentUtils.checkString(widget.conversationID) ?? + (widget.conversation.type == 1 ? widget.conversation.userID : widget.conversation.groupID) ?? + ""; } ConvType _getConvType() { @@ -361,8 +375,7 @@ class _TUIChatState extends TIMUIKitState { return; } final w = await TUICore.instance.raiseExtension(TUIExtensionID.joinInGroup, {GROUP_ID: widget.conversationID!}); - if(w != _joinInGroupCallWidget){ - + if (w != _joinInGroupCallWidget) { setState(() { _joinInGroupCallWidget = w; }); @@ -424,9 +437,16 @@ class _TUIChatState extends TIMUIKitState { } List customImageSmallPngEmojiPackages = []; - if (widget.config?.stickerPanelConfig?.customStickerPackages != null && widget.config!.stickerPanelConfig!.customStickerPackages.isNotEmpty) { - customImageSmallPngEmojiPackages = widget.config!.stickerPanelConfig!.customStickerPackages.where((element) => element.isEmoji == true).map((e) { - return CustomEmojiFaceData(name: e.name, isEmoji: true, icon: e.menuItem.url ?? "", list: e.stickerList.map((e) => e.url ?? "").toList()); + if (widget.config?.stickerPanelConfig?.customStickerPackages != null && + widget.config!.stickerPanelConfig!.customStickerPackages.isNotEmpty) { + customImageSmallPngEmojiPackages = widget.config!.stickerPanelConfig!.customStickerPackages + .where((element) => element.isEmoji == true) + .map((e) { + return CustomEmojiFaceData( + name: e.name, + isEmoji: true, + icon: e.menuItem.url ?? "", + list: e.stickerList.map((e) => e.url ?? "").toList()); }).toList(); } if (customImageSmallPngEmojiPackages.isEmpty) { @@ -452,7 +472,13 @@ class _TUIChatState extends TIMUIKitState { onDragDone: (detail) { setState(() { _dragging = false; - sendFileWithConfirmation(files: detail.files, conversation: widget.conversation, conversationType: _getConvType(), model: model, theme: theme, context: context); + sendFileWithConfirmation( + files: detail.files, + conversation: widget.conversation, + conversationType: _getConvType(), + model: model, + theme: theme, + context: context); }); }, onDragEntered: (detail) { @@ -471,7 +497,8 @@ class _TUIChatState extends TIMUIKitState { crossAxisAlignment: CrossAxisAlignment.start, children: [ if (widget.customAppBar != null) widget.customAppBar!, - if (filteredApplicationList.isNotEmpty) _renderJoinGroupApplication(filteredApplicationList.length, theme), + if (filteredApplicationList.isNotEmpty) + _renderJoinGroupApplication(filteredApplicationList.length, theme), if (widget.topFixWidget != null) widget.topFixWidget!, if (_joinInGroupCallWidget != null) Center(child: _joinInGroupCallWidget!), Expanded( @@ -484,7 +511,8 @@ class _TUIChatState extends TIMUIKitState { child: TIMUIKitHistoryMessageListContainer( customMessageHoverBarOnDesktop: widget.customMessageHoverBarOnDesktop, conversation: widget.conversation, - groupMemberInfo: model.groupMemberList?.firstWhere((element) => element?.userID == selfUserID, orElse: () => null), + groupMemberInfo: model.groupMemberList + ?.firstWhere((element) => element?.userID == selfUserID, orElse: () => null), textFieldController: textFieldController, customEmojiStickerList: widget.customEmojiStickerList, key: listContainerKey, @@ -498,7 +526,8 @@ class _TUIChatState extends TIMUIKitState { }, mainHistoryListConfig: widget.mainHistoryListConfig, initFindingMsg: widget.initFindingMsg, - extraTipsActionItemBuilder: widget.extraTipsActionItemBuilder ?? widget.exteraTipsActionItemBuilder, + extraTipsActionItemBuilder: + widget.extraTipsActionItemBuilder ?? widget.exteraTipsActionItemBuilder, conversationType: _getConvType(), scrollController: autoController, onSecondaryTapAvatar: widget.onSecondaryTapAvatar, @@ -535,7 +564,8 @@ class _TUIChatState extends TIMUIKitState { conversationType: _getConvType(), initText: TencentUtils.checkString(widget.draftText) ?? (PlatformUtils().isWeb - ? TencentUtils.checkString(conversationViewModel.getWebDraft(conversationID: widget.conversation.conversationID)) + ? TencentUtils.checkString(conversationViewModel.getWebDraft( + conversationID: widget.conversation.conversationID)) : TencentUtils.checkString(widget.conversation.draftText)), hintText: widget.textFieldHintText, showMorePanel: widget.config?.isAllowShowMorePanel ?? true, @@ -644,7 +674,8 @@ class TIMUIKitChatProviderScope extends StatelessWidget { preGroupMemberList: groupMemberList, groupID: groupID, ); - model?.showC2cMessageEditStatus = (conversationType == ConvType.c2c ? config?.showC2cMessageEditStatus ?? true : false); + model?.showC2cMessageEditStatus = + (conversationType == ConvType.c2c ? config?.showC2cMessageEditStatus ?? true : false); loadData(); } diff --git a/lib/ui/views/TIMUIKitChat/tim_uikit_chat_config.dart b/lib/ui/views/TIMUIKitChat/tim_uikit_chat_config.dart index 5af71de..8e47ce9 100644 --- a/lib/ui/views/TIMUIKitChat/tim_uikit_chat_config.dart +++ b/lib/ui/views/TIMUIKitChat/tim_uikit_chat_config.dart @@ -1,5 +1,6 @@ import 'package:tencent_cloud_chat_sdk/enum/offlinePushInfo.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; @@ -130,8 +131,7 @@ class TIMUIKitChatConfig { /// Configuration for offline push. /// If this field is specified, `notificationTitle`, `notificationOPPOChannelID`, `notificationIOSSound`, `notificationAndroidSound`, `notificationBody` and `notificationExt` will not work. - final OfflinePushInfo? Function( - V2TimMessage message, String convID, ConvType convType)? offlinePushInfo; + final OfflinePushInfo? Function(V2TimMessage message, String convID, ConvType convType)? offlinePushInfo; /// The title shows in push notification final String notificationTitle; @@ -151,13 +151,11 @@ class TIMUIKitChatConfig { /// The body content shows in push notification. /// Returning `null` means using default body in this case. - final String? Function( - V2TimMessage message, String convID, ConvType convType)? notificationBody; + final String? Function(V2TimMessage message, String convID, ConvType convType)? notificationBody; /// External information (String) for notification message, recommend used for jumping to target conversation with JSON format, /// Returning `null` means using default ext in this case. - final String? Function( - V2TimMessage message, String convID, ConvType convType)? notificationExt; + final String? Function(V2TimMessage message, String convID, ConvType convType)? notificationExt; /// The type of URL preview level, none preview, only hyperlink in text, or shows a preview card for website. /// [Default]: UrlPreviewType.previewCardAndHyperlink. @@ -277,10 +275,9 @@ class TIMUIKitChatConfig { this.isUseMessageReaction = true, this.isShowAvatar = true, this.isShowSelfNameInGroup = false, - this.isAtWhenReplyDynamic, + this.isAtWhenReplyDynamic, this.offlinePushInfo, - @Deprecated("Please use [isShowReadingStatus] instead") - this.isShowGroupMessageReadReceipt = true, + @Deprecated("Please use [isShowReadingStatus] instead") this.isShowGroupMessageReadReceipt = true, this.upperRecallTime = 120, this.isShowOthersNameInGroup = true, this.urlPreviewType = UrlPreviewType.onlyHyperlink, @@ -289,10 +286,8 @@ class TIMUIKitChatConfig { this.notificationTitle = "", this.notificationIOSSound = "", this.isAllowSoundMessage = true, - @Deprecated("not support") - this.groupReadReceiptPermisionList, - @Deprecated("not support") - this.groupReadReceiptPermissionList, + @Deprecated("not support") this.groupReadReceiptPermisionList, + @Deprecated("not support") this.groupReadReceiptPermissionList, this.isAllowEmojiPanel = true, this.isAllowShowMorePanel = true, this.isShowReadingStatus = true, @@ -303,8 +298,7 @@ class TIMUIKitChatConfig { this.isEnableTextSelection, this.additionalDesktopMessageHoverBarItem, this.isShowGroupReadingStatus = true, - @Deprecated("Please use [isShowReadingStatus] instead") - this.isReportGroupReadingStatus = true, + @Deprecated("Please use [isShowReadingStatus] instead") this.isReportGroupReadingStatus = true, this.showC2cMessageEditStatus = true, this.additionalDesktopControlBarItems, this.isAllowLongPressAvatarToAt = true, diff --git a/lib/ui/views/TIMUIKitChat/tim_uikit_send_file.dart b/lib/ui/views/TIMUIKitChat/tim_uikit_send_file.dart index 437ddb6..2a5dc03 100644 --- a/lib/ui/views/TIMUIKitChat/tim_uikit_send_file.dart +++ b/lib/ui/views/TIMUIKitChat/tim_uikit_send_file.dart @@ -2,7 +2,8 @@ import 'dart:io'; import 'package:dotted_border/dotted_border.dart'; import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.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_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; @@ -18,10 +19,7 @@ import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; import 'TIMUIKitMessageItem/tim_uikit_chat_file_icon.dart'; String _getConvID(V2TimConversation conversation) { - return (conversation.type == 1 - ? conversation.userID - : conversation.groupID) ?? - ""; + return (conversation.type == 1 ? conversation.userID : conversation.groupID) ?? ""; } sendFileWithConfirmation( @@ -65,8 +63,7 @@ sendFileWithConfirmation( return; } - final option1 = conversation.showName ?? - (conversationType == ConvType.group ? TIM_t("群聊") : TIM_t("对方")); + final option1 = conversation.showName ?? (conversationType == ConvType.group ? TIM_t("群聊") : TIM_t("对方")); TUIKitWidePopup.showPopupWindow( operationKey: TUIKitWideModalOperationKey.beforeSendScreenShot, context: context, @@ -85,9 +82,7 @@ sendFileWithConfirmation( child: ListView.separated( itemBuilder: (BuildContext context, int index) { final file = files[index]; - final fileName = PlatformUtils().isWeb - ? file.name - : path.basename(file.path); + final fileName = PlatformUtils().isWeb ? file.name : path.basename(file.path); return Material( color: theme.wideBackgroundColor, child: InkWell( @@ -95,22 +90,18 @@ sendFileWithConfirmation( launchUrl(Uri.file(file.path)); }, child: Padding( - padding: const EdgeInsets.symmetric( - vertical: 6, horizontal: 20), + padding: const EdgeInsets.symmetric(vertical: 6, horizontal: 20), child: Row( children: [ TIMUIKitFileIcon( size: 44, - fileFormat: fileName.split( - ".")[fileName.split(".").length - 1], + fileFormat: fileName.split(".")[fileName.split(".").length - 1], ), const SizedBox(width: 16), Expanded( child: Text( fileName, - style: TextStyle( - fontSize: 16, - color: theme.darkTextColor), + style: TextStyle(fontSize: 16, color: theme.darkTextColor), ), ), ], @@ -146,8 +137,7 @@ sendFileWithConfirmation( ), ElevatedButton( onPressed: () { - sendFiles(files, model, conversation, - conversationType, context); + sendFiles(files, model, conversation, conversationType, context); closeFunc(); }, child: Text(TIM_t("发送"))) @@ -159,21 +149,14 @@ sendFileWithConfirmation( )); } -Future sendFiles( - List files, - TUIChatSeparateViewModel model, - V2TimConversation conversation, - ConvType conversationType, - BuildContext context) async { +Future sendFiles(List files, TUIChatSeparateViewModel model, V2TimConversation conversation, + ConvType conversationType, BuildContext context) async { for (final file in files) { final fileName = file.name; final filePath = file.path; await MessageUtils.handleMessageError( model.sendFileMessage( - fileName: fileName, - filePath: filePath, - convID: _getConvID(conversation), - convType: conversationType), + fileName: fileName, filePath: filePath, convID: _getConvID(conversation), convType: conversationType), context); await Future.delayed(const Duration(microseconds: 300)); } @@ -188,8 +171,7 @@ class TIMUIKitSendFile extends TIMUIKitStatelessWidget { Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; final conversationType = conversation.type; - final option1 = conversation.showName ?? - (conversationType == 2 ? TIM_t("群聊") : TIM_t("会话")); + final option1 = conversation.showName ?? (conversationType == 2 ? TIM_t("群聊") : TIM_t("会话")); return Row( mainAxisSize: MainAxisSize.max, @@ -222,12 +204,8 @@ class TIMUIKitSendFile extends TIMUIKitStatelessWidget { height: 40, ), Text( - TIM_t_para("发送给{{option1}}", "发送给$option1")( - option1: option1), - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: theme.darkTextColor), + TIM_t_para("发送给{{option1}}", "发送给$option1")(option1: option1), + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: theme.darkTextColor), ) ], )) diff --git a/lib/ui/views/TIMUIKitContact/tim_uikit_contact.dart b/lib/ui/views/TIMUIKitContact/tim_uikit_contact.dart index 2921e03..9b1df80 100644 --- a/lib/ui/views/TIMUIKitContact/tim_uikit_contact.dart +++ b/lib/ui/views/TIMUIKitContact/tim_uikit_contact.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/friend_list_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_friendship_view_model.dart'; @@ -48,7 +49,6 @@ class _TIMUIKitContactState extends TIMUIKitState { final TUIFriendShipViewModel model = serviceLocator(); String currentItem = ""; - @override void dispose() { super.dispose(); @@ -72,13 +72,13 @@ class _TIMUIKitContactState extends TIMUIKitState { emptyBuilder: widget.emptyBuilder, isShowOnlineStatus: widget.isShowOnlineStatus, contactList: memberList, - onTapItem: (item){ - if(isDesktopScreen){ + onTapItem: (item) { + if (isDesktopScreen) { setState(() { currentItem = item.userID; }); } - if(widget.onTapItem != null){ + if (widget.onTapItem != null) { widget.onTapItem!(item); } }, diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart index 2fa86df..7f49603 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation.dart @@ -6,8 +6,10 @@ import 'package:flutter_slidable_plus_plus/flutter_slidable_plus_plus.dart'; import 'package:provider/provider.dart'; import 'package:scroll_to_index/scroll_to_index.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.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_state.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; @@ -32,7 +34,8 @@ typedef ConversationItemBuilder = Widget Function(V2TimConversation conversation typedef ConversationItemSlideBuilder = List Function(V2TimConversation conversationItem); -typedef ConversationItemSecondaryMenuBuilder = Widget Function(V2TimConversation conversationItem, VoidCallback onClose); +typedef ConversationItemSecondaryMenuBuilder = Widget Function( + V2TimConversation conversationItem, VoidCallback onClose); class TIMUIKitConversation extends StatefulWidget { /// the callback after clicking conversation item @@ -178,7 +181,8 @@ class _TIMUIKitConversationState extends TIMUIKitState { } _pinConversation(V2TimConversation conversation) { - _timuiKitConversationController.pinConversation(conversationID: conversation.conversationID, isPinned: !conversation.isPinned!); + _timuiKitConversationController.pinConversation( + conversationID: conversation.conversationID, isPinned: !conversation.isPinned!); } _deleteConversation(V2TimConversation conversation) { @@ -186,7 +190,8 @@ class _TIMUIKitConversationState extends TIMUIKitState { } List getFilteredConversation() { - List filteredConversationList = model.conversationList.where((element) => (element?.groupID != null || element?.userID != null)).toList(); + List filteredConversationList = + model.conversationList.where((element) => (element?.groupID != null || element?.userID != null)).toList(); if (widget.conversationCollector != null) { filteredConversationList = filteredConversationList.where(widget.conversationCollector!).toList(); } @@ -300,7 +305,8 @@ class _TIMUIKitConversationState extends TIMUIKitState { providers: [ ChangeNotifierProvider.value(value: model), ChangeNotifierProvider.value(value: friendShipViewModel), - ChangeNotifierProvider.value(value: groupListenerModel)], + ChangeNotifierProvider.value(value: groupListenerModel) + ], builder: (BuildContext context, Widget? w) { final _model = Provider.of(context); bool haveMoreData = _model.haveMoreData; @@ -346,7 +352,9 @@ class _TIMUIKitConversationState extends TIMUIKitState { final conversationItem = filteredConversationList[index]; - final V2TimUserStatus? onlineStatus = _friendShipViewModel.userStatusList.firstWhere((item) => item.userID == conversationItem?.userID, orElse: () => V2TimUserStatus(statusType: 0)); + final V2TimUserStatus? onlineStatus = _friendShipViewModel.userStatusList.firstWhere( + (item) => item.userID == conversationItem?.userID, + orElse: () => V2TimUserStatus(statusType: 0)); if (widget.itemBuilder != null) { return widget.itemBuilder!(conversationItem!, onlineStatus); @@ -371,14 +379,18 @@ class _TIMUIKitConversationState extends TIMUIKitState { lastMessageBuilder: widget.lastMessageBuilder, faceUrl: conversationItem.faceUrl ?? "", nickName: conversationItem.showName ?? "", - isDisturb: (conversationItem.groupType == "Meeting" ? false : conversationItem - .recvOpt != 0), + isDisturb: + (conversationItem.groupType == "Meeting" ? false : conversationItem.recvOpt != 0), lastMsg: conversationItem.lastMessage, isPined: isPined, groupAtInfoList: conversationItem.groupAtInfoList ?? [], unreadCount: conversationItem.unreadCount ?? 0, draftText: conversationItem.draftText, - onlineStatus: (widget.isShowOnlineStatus && conversationItem.userID != null && conversationItem.userID!.isNotEmpty) ? onlineStatus : null, + onlineStatus: (widget.isShowOnlineStatus && + conversationItem.userID != null && + conversationItem.userID!.isNotEmpty) + ? onlineStatus + : null, draftTimestamp: conversationItem.draftTimestamp, convType: conversationItem.type), onTap: () => onTapConvItem(conversationItem), @@ -399,7 +411,9 @@ class _TIMUIKitConversationState extends TIMUIKitState { isDarkBackground: false, borderRadius: const BorderRadius.all(Radius.circular(4)), context: context, - offset: Offset(min(details.globalPosition.dx, MediaQuery.of(context).size.width - 80), min(details.globalPosition.dy, MediaQuery.of(context).size.height - 130)), + offset: Offset( + min(details.globalPosition.dx, MediaQuery.of(context).size.width - 80), + min(details.globalPosition.dy, MediaQuery.of(context).size.height - 130)), child: (onClose) => _getSecondaryMenu(conversationItem, onClose)); }, child: conversationLineItem(), @@ -409,7 +423,13 @@ class _TIMUIKitConversationState extends TIMUIKitState { key: ValueKey(conversationItem.conversationID), controller: _autoScrollController, index: index, - child: Slidable(groupTag: 'conversation-list', child: conversationLineItem(), endActionPane: ActionPane(extentRatio: slideChildren.length > 2 ? 0.77 : 0.5, motion: const DrawerMotion(), children: slideChildren)), + child: Slidable( + groupTag: 'conversation-list', + child: conversationLineItem(), + endActionPane: ActionPane( + extentRatio: slideChildren.length > 2 ? 0.77 : 0.5, + motion: const DrawerMotion(), + children: slideChildren)), )); }) : (widget.emptyBuilder != null ? widget.emptyBuilder!() : Container()); diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart index eb52703..95c232f 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_item.dart @@ -1,9 +1,12 @@ // ignore_for_file: empty_catches import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_at_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/time_ago.dart'; @@ -14,8 +17,7 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; -typedef LastMessageBuilder = Widget? Function( - V2TimMessage? lastMsg, List groupAtInfoList); +typedef LastMessageBuilder = Widget? Function(V2TimMessage? lastMsg, List groupAtInfoList); class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { final String faceUrl; @@ -51,10 +53,9 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { Widget _getShowMsgWidget(BuildContext context) { final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; - if (lastMsg != null && lastMessageBuilder != null && - lastMessageBuilder!(lastMsg, groupAtInfoList) != null) { - return lastMessageBuilder!(lastMsg, groupAtInfoList)!; - } + if (lastMsg != null && lastMessageBuilder != null && lastMessageBuilder!(lastMsg, groupAtInfoList) != null) { + return lastMessageBuilder!(lastMsg, groupAtInfoList)!; + } if (lastMsg != null || (draftText != null && draftText != "")) { return TIMUIKitLastMsg( @@ -106,8 +107,7 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { decoration: BoxDecoration( border: Border( bottom: BorderSide( - color: theme.conversationItemBorderColor ?? - CommonColor.weakDividerColor, + color: theme.conversationItemBorderColor ?? CommonColor.weakDividerColor, width: 1, ), ), @@ -124,11 +124,7 @@ class TIMUIKitConversationItem extends TIMUIKitStatelessWidget { fit: StackFit.expand, clipBehavior: Clip.none, children: [ - Avatar( - onlineStatus: onlineStatus, - faceUrl: faceUrl, - showName: nickName, - type: convType), + Avatar(onlineStatus: onlineStatus, faceUrl: faceUrl, showName: nickName, type: convType), if (unreadCount != 0) Positioned( top: isDisturb ? -2.5 : -4.5, diff --git a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart index d4c83d0..8105555 100644 --- a/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart +++ b/lib/ui/views/TIMUIKitConversation/tim_uikit_conversation_last_msg.dart @@ -8,8 +8,10 @@ import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_at_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_at_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.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_state.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; @@ -205,13 +207,13 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { if (widget.groupAtInfoList.isNotEmpty) Text(_getAtMessage(), style: TextStyle(color: theme.cautionColor, fontSize: widget.fontSize)), if (widget.draftText != null && widget.draftText != "") - Text(_getDraftShowText(), style: TextStyle(color: theme.conversationItemDraftTextColor, fontSize: widget.fontSize)), + Text(_getDraftShowText(), + style: TextStyle(color: theme.conversationItemDraftTextColor, fontSize: widget.fontSize)), if (disturbUnreadCountInfo != "") Text(disturbUnreadCountInfo, style: TextStyle(color: theme.weakTextColor, fontSize: widget.fontSize)), if (widget.draftText != null && widget.draftText != "") Expanded( - child: ExtendedText( - groupTipsAbstractText, + child: ExtendedText(groupTipsAbstractText, softWrap: true, maxLines: 1, overflow: TextOverflow.ellipsis, @@ -220,23 +222,20 @@ class _TIMUIKitLastMsgState extends TIMUIKitState { isUseQQPackage: true, isUseTencentCloudChatPackage: true, showAtBackground: true, - ) - ), + )), ), if (widget.draftText == null || widget.draftText == "" && TencentUtils.checkString(groupTipsAbstractText) != null) Expanded( - child: ExtendedText( - groupTipsAbstractText, - softWrap: true, - maxLines: 1, - overflow: TextOverflow.ellipsis, - style: TextStyle(height: 1, color: theme.weakTextColor, fontSize: widget.fontSize), - specialTextSpanBuilder: DefaultSpecialTextSpanBuilder( - isUseQQPackage: true, - isUseTencentCloudChatPackage: true, - showAtBackground: true, - ) - ), + child: ExtendedText(groupTipsAbstractText, + softWrap: true, + maxLines: 1, + overflow: TextOverflow.ellipsis, + style: TextStyle(height: 1, color: theme.weakTextColor, fontSize: widget.fontSize), + specialTextSpanBuilder: DefaultSpecialTextSpanBuilder( + isUseQQPackage: true, + isUseTencentCloudChatPackage: true, + showAtBackground: true, + )), ) ]); } diff --git a/lib/ui/views/TIMUIKitGroup/tim_uikit_group.dart b/lib/ui/views/TIMUIKitGroup/tim_uikit_group.dart index 881d89b..636de5e 100644 --- a/lib/ui/views/TIMUIKitGroup/tim_uikit_group.dart +++ b/lib/ui/views/TIMUIKitGroup/tim_uikit_group.dart @@ -2,8 +2,10 @@ import 'package:azlistview_all_platforms/azlistview_all_platforms.dart'; import 'package:flutter/material.dart'; import 'package:lpinyin/lpinyin.dart'; import 'package:provider/provider.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +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/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; @@ -16,24 +18,17 @@ import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme_view_model.dart'; -typedef GroupItemBuilder = Widget Function( - BuildContext context, V2TimGroupInfo groupInfo); +typedef GroupItemBuilder = Widget Function(BuildContext context, V2TimGroupInfo groupInfo); class TIMUIKitGroup extends StatefulWidget { - final void Function(V2TimGroupInfo groupInfo, V2TimConversation conversation)? - onTapItem; + final void Function(V2TimGroupInfo groupInfo, V2TimConversation conversation)? onTapItem; final Widget Function(BuildContext context)? emptyBuilder; final GroupItemBuilder? itemBuilder; /// the filter for group conversation final bool Function(V2TimGroupInfo? groupInfo)? groupCollector; - const TIMUIKitGroup( - {Key? key, - this.onTapItem, - this.emptyBuilder, - this.itemBuilder, - this.groupCollector}) + const TIMUIKitGroup({Key? key, this.onTapItem, this.emptyBuilder, this.itemBuilder, this.groupCollector}) : super(key: key); @override @@ -41,15 +36,11 @@ class TIMUIKitGroup extends StatefulWidget { } class _TIMUIKitGroupState extends TIMUIKitState { - final TUIFriendShipViewModel _friendshipViewModel = - serviceLocator(); - final TUIGroupListenerModel _groupListenerModel = - serviceLocator(); + final TUIFriendShipViewModel _friendshipViewModel = serviceLocator(); + final TUIGroupListenerModel _groupListenerModel = serviceLocator(); - List> _getShowList( - List groupList) { - final List> showList = - List.empty(growable: true); + List> _getShowList(List groupList) { + final List> showList = List.empty(growable: true); for (var i = 0; i < groupList.length; i++) { final item = groupList[i]; @@ -72,14 +63,10 @@ class _TIMUIKitGroupState extends TIMUIKitState { final theme = Provider.of(context).theme; final showName = groupInfo.groupName ?? groupInfo.groupID; final faceUrl = groupInfo.faceUrl ?? ""; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return Container( decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: - theme.weakDividerColor ?? CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Material( color: isDesktopScreen ? theme.wideBackgroundColor : null, child: InkWell( @@ -93,10 +80,9 @@ class _TIMUIKitGroupState extends TIMUIKitState { groupType: groupInfo.groupType, faceUrl: groupInfo.faceUrl, ); - final res = await TencentImSDKPlugin - .v2TIMManager.getConversationManager() - .getConversation( - conversationID: "group_${groupInfo.groupID}"); + final res = await TencentImSDKPlugin.v2TIMManager + .getConversationManager() + .getConversation(conversationID: "group_${groupInfo.groupID}"); if (res.code == 0 && res.data != null) { conversation = res.data!; } @@ -126,8 +112,7 @@ class _TIMUIKitGroupState extends TIMUIKitState { padding: const EdgeInsets.only(top: 10, bottom: 20), child: Text( showName, - style: TextStyle( - color: Colors.black, fontSize: isDesktopScreen ? 14 : 18), + style: TextStyle(color: Colors.black, fontSize: isDesktopScreen ? 14 : 18), ), )) ], @@ -154,12 +139,10 @@ class _TIMUIKitGroupState extends TIMUIKitState { providers: [ ChangeNotifierProvider.value(value: _friendshipViewModel), ChangeNotifierProvider.value(value: _groupListenerModel), - ChangeNotifierProvider.value( - value: serviceLocator()), + ChangeNotifierProvider.value(value: serviceLocator()), ], builder: (BuildContext context, Widget? w) { - final NeedUpdate? needUpdate = - Provider.of(context).needUpdate; + final NeedUpdate? needUpdate = Provider.of(context).needUpdate; if (needUpdate != null) { _groupListenerModel.needUpdate = null; switch (needUpdate.updateType) { @@ -173,8 +156,7 @@ class _TIMUIKitGroupState extends TIMUIKitState { break; } } - List groupList = - Provider.of(context).groupList; + List groupList = Provider.of(context).groupList; if (widget.groupCollector != null) { groupList = groupList.where(widget.groupCollector!).toList(); } diff --git a/lib/ui/views/TIMUIKitGroup/tim_uikit_group_application_list.dart b/lib/ui/views/TIMUIKitGroup/tim_uikit_group_application_list.dart index 487466b..8090e89 100644 --- a/lib/ui/views/TIMUIKitGroup/tim_uikit_group_application_list.dart +++ b/lib/ui/views/TIMUIKitGroup/tim_uikit_group_application_list.dart @@ -2,7 +2,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_application_type_enum.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_application.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_application.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; @@ -14,7 +15,8 @@ import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme_view_model.dart'; -typedef GroupApplicationItemBuilder = Widget Function(BuildContext context, V2TimGroupApplication applicationInfo, int index); +typedef GroupApplicationItemBuilder = Widget Function( + BuildContext context, V2TimGroupApplication applicationInfo, int index); enum ApplicationStatus { none, @@ -57,7 +59,9 @@ class TIMUIKitGroupApplicationListState extends TIMUIKitState createState() => - TIMUIKitGroupApplicationListItemState(); + State createState() => TIMUIKitGroupApplicationListItemState(); } -class TIMUIKitGroupApplicationListItemState - extends TIMUIKitState { +class TIMUIKitGroupApplicationListItemState extends TIMUIKitState { ApplicationStatus applicationStatus = ApplicationStatus.none; - String _getUserName() { if (widget.applicationInfo.fromUserNickName != null && widget.applicationInfo.fromUserNickName!.isNotEmpty && - widget.applicationInfo.fromUserNickName != - widget.applicationInfo.fromUser) { + widget.applicationInfo.fromUserNickName != widget.applicationInfo.fromUser) { return "${widget.applicationInfo.fromUserNickName} (${widget.applicationInfo.fromUser})"; } else { return "${widget.applicationInfo.fromUser}"; @@ -55,26 +50,18 @@ class TIMUIKitGroupApplicationListItemState width: 40, child: Avatar( faceUrl: widget.applicationInfo.fromUserFaceUrl ?? "", - showName: widget.applicationInfo.fromUserNickName ?? - widget.applicationInfo.fromUser ?? - ""), + showName: widget.applicationInfo.fromUserNickName ?? widget.applicationInfo.fromUser ?? ""), ), ), Column( children: [ Text( _getUserName(), - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: theme.darkTextColor), + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: theme.darkTextColor), ), Text( _getUserName(), - style: TextStyle( - fontSize: 16, - fontWeight: FontWeight.w600, - color: theme.darkTextColor), + style: TextStyle(fontSize: 16, fontWeight: FontWeight.w600, color: theme.darkTextColor), ), ], ) diff --git a/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_add_group_member.dart b/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_add_group_member.dart index e7c1b33..b6a0de1 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_add_group_member.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_add_group_member.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_group_profile_model.dart'; diff --git a/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_delete_group_member.dart b/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_delete_group_member.dart index 04bbf38..e0d7428 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_delete_group_member.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_delete_group_member.dart @@ -2,8 +2,10 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.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_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.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_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_group_profile_model.dart'; @@ -33,7 +35,8 @@ class _DeleteGroupMemberPageState extends TIMUIKitState { handleSearchGroupMembers(String searchText, context) async { searchText = searchText; - List currentGroupMember = Provider.of(context, listen: false).groupMemberList; + List currentGroupMember = + Provider.of(context, listen: false).groupMemberList; final res = await widget.model.searchGroupMember(V2TimGroupMemberSearchParam( keywordList: [searchText], groupIDList: [widget.model.groupInfo!.groupID], @@ -60,7 +63,10 @@ class _DeleteGroupMemberPageState extends TIMUIKitState { } handleRole(groupMemberList) { - return groupMemberList?.where((value) => value?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER).toList() ?? []; + return groupMemberList + ?.where((value) => value?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER) + .toList() ?? + []; } void submitDelete() async { diff --git a/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_group_member_list.dart b/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_group_member_list.dart index 2f6148f..1d05e35 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_group_member_list.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/group_member/tui_group_member_list.dart @@ -3,8 +3,10 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.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_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.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_state.dart'; @@ -29,8 +31,7 @@ class GroupProfileMemberListPage extends StatefulWidget { State createState() => GroupProfileMemberListPageState(); } -class GroupProfileMemberListPageState - extends TIMUIKitState { +class GroupProfileMemberListPageState extends TIMUIKitState { List? searchMemberList; String? searchText; @@ -45,8 +46,7 @@ class GroupProfileMemberListPageState handleSearchGroupMembers(String searchText, context) async { searchText = searchText; List currentGroupMember = - Provider.of(context, listen: false) - .groupMemberList; + Provider.of(context, listen: false).groupMemberList; if (!isSearchTextExist(searchText)) { setState(() { @@ -55,8 +55,7 @@ class GroupProfileMemberListPageState return; } - final res = - await widget.model.searchGroupMember(V2TimGroupMemberSearchParam( + final res = await widget.model.searchGroupMember(V2TimGroupMemberSearchParam( keywordList: [searchText], groupIDList: [widget.model.groupInfo!.groupID], )); @@ -84,25 +83,21 @@ class GroupProfileMemberListPageState @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final TUITheme theme = value.theme; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor() == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor() == DeviceType.Desktop; return MultiProvider( providers: [ ChangeNotifierProvider.value(value: widget.model), ], builder: (BuildContext context, Widget? w) { - final TUIGroupProfileModel groupProfileModel = - Provider.of(context); - String option1 = groupProfileModel.groupInfo?.memberCount.toString() ?? - widget.memberList.length.toString(); - if(isDesktopScreen){ - return GroupProfileMemberList( + final TUIGroupProfileModel groupProfileModel = Provider.of(context); + String option1 = groupProfileModel.groupInfo?.memberCount.toString() ?? widget.memberList.length.toString(); + if (isDesktopScreen) { + return GroupProfileMemberList( customTopArea: PlatformUtils().isWeb ? null : GroupMemberSearchTextField( - onTextChange: (text) => - handleSearchGroupMembers(text, context), - ), + onTextChange: (text) => handleSearchGroupMembers(text, context), + ), memberList: searchMemberList ?? groupProfileModel.groupMemberList, removeMember: _kickedOffMember, touchBottomCallBack: () {}, @@ -116,13 +111,11 @@ class GroupProfileMemberListPageState return Scaffold( appBar: AppBar( title: Text( - TIM_t_para("群成员({{option1}}人)", "群成员($option1人)")( - option1: option1), + TIM_t_para("群成员({{option1}}人)", "群成员($option1人)")(option1: option1), style: TextStyle(color: theme.appbarTextColor, fontSize: 17), ), shadowColor: theme.weakBackgroundColor, - backgroundColor: theme.appbarBgColor ?? - theme.primaryColor, + backgroundColor: theme.appbarBgColor ?? theme.primaryColor, iconTheme: IconThemeData( color: theme.appbarTextColor, )), @@ -130,8 +123,7 @@ class GroupProfileMemberListPageState customTopArea: PlatformUtils().isWeb ? null : GroupMemberSearchTextField( - onTextChange: (text) => - handleSearchGroupMembers(text, context), + onTextChange: (text) => handleSearchGroupMembers(text, context), ), memberList: searchMemberList ?? groupProfileModel.groupMemberList, removeMember: _kickedOffMember, @@ -141,8 +133,7 @@ class GroupProfileMemberListPageState widget.model.onClickUser!(memberInfo, details); } }, - ) - ); + )); }, ); } diff --git a/lib/ui/views/TIMUIKitGroupProfile/group_profile_widget.dart b/lib/ui/views/TIMUIKitGroupProfile/group_profile_widget.dart index e96fcbb..d05070d 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/group_profile_widget.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/group_profile_widget.dart @@ -1,6 +1,8 @@ import 'package:flutter/cupertino.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; +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'; enum GroupProfileWidgetEnum { /// The detail card for group. @@ -63,15 +65,14 @@ enum GroupProfileWidgetEnum { class GroupProfileWidgetBuilder { /// The detail card for group. - Widget Function(V2TimGroupInfo groupInfo, - Function(String updateGroupName)? updateGroupName)? detailCard; + Widget Function(V2TimGroupInfo groupInfo, Function(String updateGroupName)? updateGroupName)? detailCard; /// The tile shows the members in the group. Widget Function(List memberList)? memberListTile; /// The entrance to the page editing the group notice. - Widget Function(String currentNotice, Function() toDefaultNoticeEditPage, - Function(String newNotice) setGroupNotice)? groupNotice; + Widget Function(String currentNotice, Function() toDefaultNoticeEditPage, Function(String newNotice) setGroupNotice)? + groupNotice; /// The entrance to the page managing the group. /// Works only for group owner and group admin. @@ -89,47 +90,37 @@ class GroupProfileWidgetBuilder { /// Shows and modify the mode or options users add the group. /// Includes "0: disallow group joining", "1: admin approval" and "2: automatic approval". - Widget Function(int groupAddOptType, Function(int addOpt) handleActionTap)? - groupJoiningModeBar; + Widget Function(int groupAddOptType, Function(int addOpt) handleActionTap)? groupJoiningModeBar; /// Shows and modify the nickname for user in a specific group, /// only shows and used in this group, as the name card here. - Widget Function(String nameCard, Function(String newName) setNameCard)? - nameCardBar; + Widget Function(String nameCard, Function(String newName) setNameCard)? nameCardBar; /// The switch of if mute the message notification from a specific group. - Widget Function(bool isMute, Function(bool isMute) setMute)? - muteGroupMessageBar; + Widget Function(bool isMute, Function(bool isMute) setMute)? muteGroupMessageBar; /// The switch of if pin this group to the top in conversation list. - Widget Function(bool isPined, Function(bool isMute) pinedConversation)? - pinedConversationBar; + Widget Function(bool isPined, Function(bool isMute) pinedConversation)? pinedConversationBar; /// The button area, includes /// "clear chat history", "transfer group owner", "disband group" and "quit group" /// as default. - Widget Function(V2TimGroupInfo groupInfo, - List groupMemberList)? buttonArea; + Widget Function(V2TimGroupInfo groupInfo, List groupMemberList)? buttonArea; /// Custom area, you may define anything you want here. - Widget Function(V2TimGroupInfo groupInfo, - List groupMemberList)? customBuilderOne; + Widget Function(V2TimGroupInfo groupInfo, List groupMemberList)? customBuilderOne; /// Custom area, you may define anything you want here. - Widget Function(V2TimGroupInfo groupInfo, - List groupMemberList)? customBuilderTwo; + Widget Function(V2TimGroupInfo groupInfo, List groupMemberList)? customBuilderTwo; /// Custom area, you may define anything you want here. - Widget Function(V2TimGroupInfo groupInfo, - List groupMemberList)? customBuilderThree; + Widget Function(V2TimGroupInfo groupInfo, List groupMemberList)? customBuilderThree; /// Custom area, you may define anything you want here. - Widget Function(V2TimGroupInfo groupInfo, - List groupMemberList)? customBuilderFour; + Widget Function(V2TimGroupInfo groupInfo, List groupMemberList)? customBuilderFour; /// Custom area, you may define anything you want here. - Widget Function(V2TimGroupInfo groupInfo, - List groupMemberList)? customBuilderFive; + Widget Function(V2TimGroupInfo groupInfo, List groupMemberList)? customBuilderFive; GroupProfileWidgetBuilder( {this.detailCard, diff --git a/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart b/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart index b036728..f9a7a4d 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/tim_uikit_group_profile.dart @@ -4,8 +4,10 @@ import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_change_info_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; +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_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/group_profile_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/listener_model/tui_group_listener_model.dart'; @@ -21,8 +23,8 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitGroupProfile/widgets/t import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; export 'package:tencent_cloud_chat_uikit/ui/widgets/transimit_group_owner_select.dart'; -typedef GroupProfileBuilder = Widget Function(BuildContext context, - V2TimGroupInfo groupInfo, List groupMemberList); +typedef GroupProfileBuilder = Widget Function( + BuildContext context, V2TimGroupInfo groupInfo, List groupMemberList); class TIMUIKitGroupProfile extends StatefulWidget { /// Group ID @@ -31,13 +33,15 @@ class TIMUIKitGroupProfile extends StatefulWidget { /// [Deprecated:] The builder for custom bottom operation area. /// [operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead. - final Widget Function(BuildContext context, V2TimGroupInfo groupInfo, - List groupMemberList)? bottomOperationBuilder; + final Widget Function( + BuildContext context, V2TimGroupInfo groupInfo, List groupMemberList)? + bottomOperationBuilder; /// [Deprecated:] The builder for custom bottom operation area. /// [operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead. - final Widget Function(BuildContext context, V2TimGroupInfo groupInfo, - List groupMemberList)? operationListBuilder; + final Widget Function( + BuildContext context, V2TimGroupInfo groupInfo, List groupMemberList)? + operationListBuilder; /// [If you tend to customize the profile page, use [profileWidgetBuilder] with [profileWidgetsOrder] as priority.] /// The builder for each widgets in profile page, @@ -67,9 +71,9 @@ class TIMUIKitGroupProfile extends StatefulWidget { required this.groupID, this.backGroundColor, @Deprecated("[operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead") - this.bottomOperationBuilder, + this.bottomOperationBuilder, @Deprecated("[operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead") - this.operationListBuilder, + this.operationListBuilder, this.builder, this.profileWidgetBuilder, this.onClickUser, @@ -84,8 +88,7 @@ class TIMUIKitGroupProfile extends StatefulWidget { class _TIMUIKitGroupProfileState extends TIMUIKitState { bool isSingleUse = false; final model = TUIGroupProfileModel(); - final TUIGroupListenerModel groupListenerModel = - serviceLocator(); + final TUIGroupListenerModel groupListenerModel = serviceLocator(); @override void initState() { @@ -141,8 +144,7 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { model.lifeCycle = widget.lifeCycle; final V2TimGroupInfo? groupInfo = model.groupInfo; final memberList = model.groupMemberList; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (groupInfo == null) { return Center( child: LoadingAnimationWidget.staggeredDotsWave( @@ -152,8 +154,7 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { ); } - final TUIGroupListenerModel groupListenerModel = - Provider.of(context); + final TUIGroupListenerModel groupListenerModel = Provider.of(context); final NeedUpdate? needUpdate = groupListenerModel.needUpdate; if (needUpdate != null && needUpdate.groupID == widget.groupID) { groupListenerModel.needUpdate = null; @@ -174,18 +175,14 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { } } - final isGroupOwner = groupInfo.role == - GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER; - final isAdmin = groupInfo.role == - GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN; + final isGroupOwner = groupInfo.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER; + final isAdmin = groupInfo.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN; Widget groupProfilePage({required Widget child}) { return SingleChildScrollView( child: Container( - color: widget.backGroundColor ?? - (isDesktopScreen - ? theme.wideBackgroundColor - : theme.weakBackgroundColor), + color: + widget.backGroundColor ?? (isDesktopScreen ? theme.wideBackgroundColor : theme.weakBackgroundColor), child: child, ), ); @@ -195,9 +192,8 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { Navigator.push( context, MaterialPageRoute( - builder: (context) => GroupProfileNotificationPage( - model: model, - notification: groupInfo.notification ?? ""))); + builder: (context) => + GroupProfileNotificationPage(model: model, notification: groupInfo.notification ?? ""))); } void toDefaultManagePage() { @@ -209,19 +205,15 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { ))); } - List _renderWidgetsWithOrder( - List order) { - final GroupProfileWidgetBuilder? customBuilder = - widget.profileWidgetBuilder; + List _renderWidgetsWithOrder(List order) { + final GroupProfileWidgetBuilder? customBuilder = widget.profileWidgetBuilder; return order.map((element) { switch (element) { case GroupProfileWidgetEnum.detailCard: return (customBuilder?.detailCard != null - ? customBuilder?.detailCard!( - groupInfo, model.setGroupName) + ? customBuilder?.detailCard!(groupInfo, model.setGroupName) : TIMUIKitGroupProfileWidget.detailCard( - isHavePermission: isAdmin || isGroupOwner, - groupInfo: groupInfo))!; + isHavePermission: isAdmin || isGroupOwner, groupInfo: groupInfo))!; case GroupProfileWidgetEnum.memberListTile: return (customBuilder?.memberListTile != null ? customBuilder?.memberListTile!(memberList) @@ -229,11 +221,8 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { case GroupProfileWidgetEnum.groupNotice: return (customBuilder?.groupNotice != null ? customBuilder?.groupNotice!( - groupInfo.notification ?? "", - toDefaultNoticePage, - model.setGroupNotification) - : TIMUIKitGroupProfileWidget.groupNotification( - isHavePermission: isAdmin || isGroupOwner))!; + groupInfo.notification ?? "", toDefaultNoticePage, model.setGroupNotification) + : TIMUIKitGroupProfileWidget.groupNotification(isHavePermission: isAdmin || isGroupOwner))!; case GroupProfileWidgetEnum.groupManage: if (isAdmin || isGroupOwner) { return (customBuilder?.groupManage != null @@ -263,25 +252,20 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { return Container(); } return (customBuilder?.groupJoiningModeBar != null - ? customBuilder?.groupJoiningModeBar!( - groupInfo.groupAddOpt ?? 1, model.setGroupAddOpt) + ? customBuilder?.groupJoiningModeBar!(groupInfo.groupAddOpt ?? 1, model.setGroupAddOpt) : TIMUIKitGroupProfileWidget.groupAddOpt())!; case GroupProfileWidgetEnum.nameCardBar: return (customBuilder?.nameCardBar != null - ? customBuilder?.nameCardBar!( - model.getSelfNameCard(), model.setNameCard) + ? customBuilder?.nameCardBar!(model.getSelfNameCard(), model.setNameCard) : TIMUIKitGroupProfileWidget.nameCard())!; case GroupProfileWidgetEnum.muteGroupMessageBar: return (customBuilder?.muteGroupMessageBar != null - ? customBuilder?.muteGroupMessageBar!( - model.conversation?.recvOpt != 0, - model.setMessageDisturb) + ? customBuilder?.muteGroupMessageBar!(model.conversation?.recvOpt != 0, model.setMessageDisturb) : TIMUIKitGroupProfileWidget.messageDisturb())!; case GroupProfileWidgetEnum.pinedConversationBar: return (customBuilder?.pinedConversationBar != null ? customBuilder?.pinedConversationBar!( - model.conversation?.isPinned ?? false, - model.pinedConversation) + model.conversation?.isPinned ?? false, model.pinedConversation) : TIMUIKitGroupProfileWidget.pinedConversation())!; case GroupProfileWidgetEnum.buttonArea: return (customBuilder?.buttonArea != null @@ -299,8 +283,7 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; case GroupProfileWidgetEnum.customBuilderThree: return (customBuilder?.customBuilderThree != null - ? customBuilder?.customBuilderThree!( - groupInfo, memberList) + ? customBuilder?.customBuilderThree!(groupInfo, memberList) // Please define the corresponding custom widget in `profileWidgetBuilder` before using it here. : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; case GroupProfileWidgetEnum.customBuilderFour: @@ -326,9 +309,7 @@ class _TIMUIKitGroupProfileState extends TIMUIKitState { } else if (widget.profileWidgetsOrder != null) { return groupProfilePage( child: Column( - children: [ - ..._renderWidgetsWithOrder(widget.profileWidgetsOrder!) - ], + children: [..._renderWidgetsWithOrder(widget.profileWidgetsOrder!)], ), ); } else { diff --git a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_profile_widget.dart b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_profile_widget.dart index 2f6980b..94ea466 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_profile_widget.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_profile_widget.dart @@ -1,6 +1,8 @@ import 'package:flutter/cupertino.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +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_uikit/ui/utils/screen_utils.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/TIMUIKitGroupProfile/widgets/tim_uikit_group_add_opt.dart'; diff --git a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_search_msg.dart b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_search_msg.dart index 2c4dd62..7ce113d 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_search_msg.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_ui_group_search_msg.dart @@ -3,7 +3,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.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'; @@ -16,10 +17,8 @@ import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; class GroupProfileGroupSearch extends TIMUIKitStatelessWidget { - GroupProfileGroupSearch({Key? key, required this.onJumpToSearch}) - : super(key: key); - final ConversationService _conversationService = - serviceLocator(); + GroupProfileGroupSearch({Key? key, required this.onJumpToSearch}) : super(key: key); + final ConversationService _conversationService = serviceLocator(); final Function(V2TimConversation?) onJumpToSearch; @@ -32,21 +31,16 @@ class GroupProfileGroupSearch extends TIMUIKitStatelessWidget { return InkWell( onTap: () async { V2TimConversation? conversation = - await _conversationService.getConversation( - conversationID: "group_${model.groupInfo!.groupID}"); + await _conversationService.getConversation(conversationID: "group_${model.groupInfo!.groupID}"); if (conversation != null) { onJumpToSearch(conversation); } }, child: Container( - padding: const EdgeInsets.symmetric( - vertical: 14, horizontal: 16), + padding: const EdgeInsets.symmetric(vertical: 14, horizontal: 16), decoration: BoxDecoration( color: Colors.white, - border: Border( - bottom: BorderSide( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ 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 6914bc5..7b14376 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 @@ -1,7 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_group_profile_model.dart'; @@ -20,11 +21,9 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { final TUIGroupProfileModel model; final sdkInstance = TIMUIKitCore.getSDKInstance(); final coreInstance = TIMUIKitCore.getInstance(); - final TIMUIKitChatController _timuiKitChatController = - TIMUIKitChatController(); + final TIMUIKitChatController _timuiKitChatController = TIMUIKitChatController(); - GroupProfileButtonArea(this.groupID, this.model, {Key? key}) - : super(key: key); + GroupProfileButtonArea(this.groupID, this.model, {Key? key}) : super(key: key); final _operationList = [ {"label": TIM_t("清空消息"), "id": "clearHistory"}, @@ -34,8 +33,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { ]; _clearHistory(BuildContext context, theme) async { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (isDesktopScreen) { TUIKitWidePopup.showSecondaryConfirmDialog( @@ -46,16 +44,13 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { onCancel: () {}, onConfirm: () async { if (PlatformUtils().isWeb) { - final res = await sdkInstance - .getConversationManager() - .deleteConversation(conversationID: "group_$groupID"); + final res = + await sdkInstance.getConversationManager().deleteConversation(conversationID: "group_$groupID"); if (res.code == 0) { _timuiKitChatController.clearHistory(groupID); } } else { - final res = await sdkInstance - .getMessageManager() - .clearGroupHistoryMessage(groupID: groupID); + final res = await sdkInstance.getMessageManager().clearGroupHistoryMessage(groupID: groupID); if (res.code == 0) { _timuiKitChatController.clearHistory(groupID); } @@ -82,16 +77,13 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { context, ); if (PlatformUtils().isWeb) { - final res = await sdkInstance - .getConversationManager() - .deleteConversation(conversationID: "group_$groupID"); + final res = + await sdkInstance.getConversationManager().deleteConversation(conversationID: "group_$groupID"); if (res.code == 0) { _timuiKitChatController.clearHistory(groupID); } } else { - final res = await sdkInstance - .getMessageManager() - .clearGroupHistoryMessage(groupID: groupID); + final res = await sdkInstance.getMessageManager().clearGroupHistoryMessage(groupID: groupID); if (res.code == 0) { _timuiKitChatController.clearHistory(groupID); } @@ -111,8 +103,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { } _quitGroup(BuildContext context, TUITheme theme) async { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (isDesktopScreen) { TUIKitWidePopup.showSecondaryConfirmDialog( @@ -124,9 +115,8 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { onConfirm: () async { final res = await sdkInstance.quitGroup(groupID: groupID); if (res.code == 0) { - final deleteConvRes = await sdkInstance - .getConversationManager() - .deleteConversation(conversationID: "group_$groupID"); + final deleteConvRes = + await sdkInstance.getConversationManager().deleteConversation(conversationID: "group_$groupID"); if (deleteConvRes.code == 0) { model.lifeCycle?.didLeaveGroup(); } @@ -155,9 +145,8 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { ); final res = await sdkInstance.quitGroup(groupID: groupID); if (res.code == 0) { - final deleteConvRes = await sdkInstance - .getConversationManager() - .deleteConversation(conversationID: "group_$groupID"); + final deleteConvRes = + await sdkInstance.getConversationManager().deleteConversation(conversationID: "group_$groupID"); if (deleteConvRes.code == 0) { model.lifeCycle?.didLeaveGroup(); } @@ -181,8 +170,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { } _dismissGroup(BuildContext context, theme) async { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (isDesktopScreen) { TUIKitWidePopup.showSecondaryConfirmDialog( @@ -194,9 +182,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { onConfirm: () async { final res = await sdkInstance.dismissGroup(groupID: groupID); if (res.code == 0) { - await sdkInstance - .getConversationManager() - .deleteConversation(conversationID: "group_$groupID"); + await sdkInstance.getConversationManager().deleteConversation(conversationID: "group_$groupID"); model.lifeCycle?.didLeaveGroup(); } }); @@ -220,9 +206,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { onPressed: () async { final res = await sdkInstance.dismissGroup(groupID: groupID); if (res.code == 0) { - await sdkInstance - .getConversationManager() - .deleteConversation(conversationID: "group_$groupID"); + await sdkInstance.getConversationManager().deleteConversation(conversationID: "group_$groupID"); model.lifeCycle?.didLeaveGroup(); } }, @@ -240,8 +224,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { } _transmitOwner(BuildContext context, String groupID) async { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (isDesktopScreen) { TUIKitWidePopup.showPopupWindow( @@ -260,9 +243,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { onSelectedMember: (selectedMember) async { if (selectedMember.isNotEmpty) { final userID = selectedMember.first.userID; - await sdkInstance - .getGroupManager() - .transferGroupOwner(groupID: groupID, userID: userID); + await sdkInstance.getGroupManager().transferGroupOwner(groupID: groupID, userID: userID); } }, ), @@ -279,29 +260,23 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { ); if (selectedMember != null) { final userID = selectedMember.first.userID; - await sdkInstance - .getGroupManager() - .transferGroupOwner(groupID: groupID, userID: userID); + await sdkInstance.getGroupManager().transferGroupOwner(groupID: groupID, userID: userID); } } } - List _renderGroupOperation( - BuildContext context, TUITheme theme, bool isOwner, String groupType) { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + List _renderGroupOperation(BuildContext context, TUITheme theme, bool isOwner, String groupType) { + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return _operationList .where((element) { if (!isOwner) { return ["quitGroup", "clearHistory"].contains(element["id"]); } else { if (groupType == "Work") { - return ["clearHistory", "quitGroup", "transimitOwner"] - .contains(element["id"]); + return ["clearHistory", "quitGroup", "transimitOwner"].contains(element["id"]); } if (groupType != "Work") { - return ["clearHistory", "dismissGroup", "transimitOwner"] - .contains(element["id"]); + return ["clearHistory", "dismissGroup", "transimitOwner"].contains(element["id"]); } return true; } @@ -340,10 +315,8 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { padding: const EdgeInsets.symmetric(vertical: 15), decoration: BoxDecoration( color: Colors.white, - border: Border( - bottom: BorderSide( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor))), + border: + Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Text( e["label"]!, style: TextStyle(color: theme.cautionColor, fontSize: 17), @@ -358,8 +331,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { final theme = value.theme; final groupInfo = model.groupInfo; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (isDesktopScreen) { return Container( padding: const EdgeInsets.symmetric(horizontal: 16), @@ -367,10 +339,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { spacing: 28, children: [ ..._renderGroupOperation( - context, - theme, - groupInfo?.owner == coreInstance.loginUserInfo?.userID, - groupInfo?.groupType ?? "") + context, theme, groupInfo?.owner == coreInstance.loginUserInfo?.userID, groupInfo?.groupType ?? "") ], ), ); @@ -379,10 +348,7 @@ class GroupProfileButtonArea extends TIMUIKitStatelessWidget { return Column( children: [ ..._renderGroupOperation( - context, - theme, - groupInfo?.owner == coreInstance.loginUserInfo?.userID, - groupInfo?.groupType ?? "") + context, theme, groupInfo?.owner == coreInstance.loginUserInfo?.userID, groupInfo?.groupType ?? "") ], ); } diff --git a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_detail_card.dart b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_detail_card.dart index 045707f..cf26ba4 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_detail_card.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_detail_card.dart @@ -4,7 +4,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; +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_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_group_profile_model.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; @@ -19,11 +20,7 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { final TextEditingController controller = TextEditingController(); final bool isHavePermission; - GroupProfileDetailCard( - {Key? key, - required this.groupInfo, - this.isHavePermission = false, - this.updateGroupName}) + GroupProfileDetailCard({Key? key, required this.groupInfo, this.isHavePermission = false, this.updateGroupName}) : super(key: key); @override @@ -33,8 +30,7 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { final faceUrl = groupInfo.faceUrl ?? ""; final groupID = groupInfo.groupID; final showName = groupInfo.groupName ?? groupID; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return InkWell( onTapDown: !isHavePermission @@ -45,11 +41,8 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { context: context, title: TIM_t("修改群名称"), initText: showName, - initOffset: Offset( - min(details.globalPosition.dx, - MediaQuery.of(context).size.width - 350), - min(details.globalPosition.dy + 20, - MediaQuery.of(context).size.height - 470)), + initOffset: Offset(min(details.globalPosition.dx, MediaQuery.of(context).size.width - 350), + min(details.globalPosition.dy + 20, MediaQuery.of(context).size.height - 470)), onSubmitted: (String newText) async { final text = newText.trim(); if (updateGroupName != null) { @@ -88,31 +81,25 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { decoration: const BoxDecoration( color: Colors.white, borderRadius: BorderRadius.only( - topLeft: Radius.circular(10.0), - topRight: Radius.circular(10.0))), + topLeft: Radius.circular(10.0), topRight: Radius.circular(10.0))), child: Column( mainAxisSize: MainAxisSize.min, children: [ Container( - padding: const EdgeInsets.symmetric( - vertical: 20), + padding: const EdgeInsets.symmetric(vertical: 20), child: Text(TIM_t("修改群名称")), ), - Divider( - height: 2, - color: theme.weakDividerColor), + Divider(height: 2, color: theme.weakDividerColor), Padding( padding: const EdgeInsets.all(20), child: Column( - crossAxisAlignment: - CrossAxisAlignment.start, + crossAxisAlignment: CrossAxisAlignment.start, children: [ TextField( controller: controller, decoration: InputDecoration( border: InputBorder.none, - fillColor: theme - .weakBackgroundColor, + fillColor: theme.weakBackgroundColor, filled: true, isDense: true, hintText: ''), @@ -122,10 +109,7 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { ), Text( TIM_t("修改群名称"), - style: TextStyle( - fontSize: 13, - color: - theme.weakTextColor), + style: TextStyle(fontSize: 13, color: theme.weakTextColor), textAlign: TextAlign.left, ), const SizedBox( @@ -135,16 +119,11 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { width: double.infinity, child: ElevatedButton( onPressed: () { - final text = controller - .text - .trim(); - if (updateGroupName != - null) { - updateGroupName!( - text); + final text = controller.text.trim(); + if (updateGroupName != null) { + updateGroupName!(text); } else { - model.setGroupName( - text); + model.setGroupName(text); } Navigator.pop(context); Navigator.pop(context); @@ -155,11 +134,8 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { height: 20, ), Padding( - padding: EdgeInsets.only( - bottom: - MediaQuery.of(context) - .viewInsets - .bottom), + padding: + EdgeInsets.only(bottom: MediaQuery.of(context).viewInsets.bottom), ) ], ), @@ -209,17 +185,13 @@ class GroupProfileDetailCard extends TIMUIKitStatelessWidget { children: [ SelectableText( showName, - style: TextStyle( - fontSize: isDesktopScreen ? 15 : 18, - fontWeight: FontWeight.w600), + style: TextStyle(fontSize: isDesktopScreen ? 15 : 18, fontWeight: FontWeight.w600), ), SizedBox( height: isDesktopScreen ? 4 : 8, ), SelectableText("ID: $groupID", - style: TextStyle( - fontSize: isDesktopScreen ? 13 : 13, - color: theme.weakTextColor)) + style: TextStyle(fontSize: isDesktopScreen ? 13 : 13, color: theme.weakTextColor)) ], ), ), diff --git a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_manage.dart b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_manage.dart index babb4c6..631a52c 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_manage.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_manage.dart @@ -7,7 +7,8 @@ import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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/tencent_im_sdk_plugin.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_state.dart'; @@ -45,7 +46,11 @@ class GroupProfileGroupManageState extends TIMUIKitState())], + providers: [ + ChangeNotifierProvider.value(value: widget.model), + ChangeNotifierProvider.value(value: serviceLocator()) + ], builder: (context, w) { final memberList = Provider.of(context).groupMemberList; final theme = Provider.of(context).theme; @@ -133,8 +141,16 @@ class _GroupProfileGroupManagePageState extends TIMUIKitState TUIKitColumnMenu(data: [ ColumnMenuItem( label: TIM_t("删除"), @@ -408,7 +439,10 @@ Widget _buildListItem(BuildContext context, V2TimGroupMemberFullInfo memberInfo, ); } - return TUIKitScreenUtils.getDeviceWidget(context: context, desktopWidget: nameItem(), defaultWidget: SingleChildScrollView(child: Slidable(endActionPane: endActionPane, child: nameItem()))); + return TUIKitScreenUtils.getDeviceWidget( + context: context, + desktopWidget: nameItem(), + defaultWidget: SingleChildScrollView(child: Slidable(endActionPane: endActionPane, child: nameItem()))); } /// 选择管理员 @@ -509,7 +543,12 @@ class _GroupProfileSetManagerPageState extends TIMUIKitState GroupProfileAddAdmin( key: groupProfileAddAdminKey, - memberList: memberList.where((element) => element?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER).toList(), + memberList: memberList + .where( + (element) => element?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER) + .toList(), appbarTitle: TIM_t("设置管理员"), selectCompletedHandler: (context, selectedMember) async { if (selectedMember.isNotEmpty) { @@ -554,7 +596,10 @@ class _GroupProfileSetManagerPageState extends TIMUIKitState GroupProfileAddAdmin( key: groupProfileAddAdminKey, - memberList: memberList.where((element) => element?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER).toList(), + memberList: memberList + .where((element) => + element?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_MEMBER) + .toList(), appbarTitle: TIM_t("设置管理员"), selectCompletedHandler: (context, selectedMember) async { if (selectedMember.isNotEmpty) { @@ -576,7 +621,8 @@ class _GroupProfileSetManagerPageState extends TIMUIKitState TUIKitColumnMenu(data: [ ColumnMenuItem( label: TIM_t("删除"), @@ -638,7 +684,9 @@ class GroupProfileAddAdmin extends StatefulWidget { final String appbarTitle; final void Function(BuildContext context, List selectedMemberList)? selectCompletedHandler; - const GroupProfileAddAdmin({Key? key, required this.memberList, this.selectCompletedHandler, required this.appbarTitle}) : super(key: key); + const GroupProfileAddAdmin( + {Key? key, required this.memberList, this.selectCompletedHandler, required this.appbarTitle}) + : super(key: key); @override State createState() => _GroupProfileAddAdminState(); @@ -672,7 +720,10 @@ class _GroupProfileAddAdminState extends TIMUIKitState { ), ...widget.memberList .map((e) => Container( - decoration: BoxDecoration(color: Colors.white, border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), + decoration: BoxDecoration( + color: Colors.white, + border: + Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), padding: const EdgeInsets.symmetric(vertical: 10, horizontal: 16), child: InkWell( onTap: () { diff --git a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_member_title.dart b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_member_title.dart index bf64534..fcc843f 100644 --- a/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_member_title.dart +++ b/lib/ui/views/TIMUIKitGroupProfile/widgets/tim_uikit_group_member_title.dart @@ -4,7 +4,8 @@ import 'package:dotted_border/dotted_border.dart'; import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_group_profile_model.dart'; @@ -87,7 +88,8 @@ class GroupMemberTitle extends TIMUIKitStatelessWidget { return []; } - void navigateToMemberList(BuildContext context, TUIGroupProfileModel model, List memberList) { + void navigateToMemberList( + BuildContext context, TUIGroupProfileModel model, List memberList) { final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (!isDesktopScreen) { Navigator.push( @@ -134,7 +136,10 @@ class GroupMemberTitle extends TIMUIKitStatelessWidget { children: [ Container( padding: const EdgeInsets.only(bottom: 12), - decoration: isDesktopScreen ? null : BoxDecoration(border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), + decoration: isDesktopScreen + ? null + : BoxDecoration( + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: InkWell( onTap: () async { navigateToMemberList(context, model, memberList); diff --git a/lib/ui/views/TIMUIKitNewContact/tim_uikit_new_contact.dart b/lib/ui/views/TIMUIKitNewContact/tim_uikit_new_contact.dart index 91f8868..53f1e20 100644 --- a/lib/ui/views/TIMUIKitNewContact/tim_uikit_new_contact.dart +++ b/lib/ui/views/TIMUIKitNewContact/tim_uikit_new_contact.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_application.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_application.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/new_contact_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_friendship_view_model.dart'; @@ -13,8 +14,7 @@ import 'package:tencent_cloud_chat_uikit/ui/widgets/avatar.dart'; import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme_view_model.dart'; -typedef NewContactItemBuilder = Widget Function( - BuildContext context, V2TimFriendApplication applicationInfo); +typedef NewContactItemBuilder = Widget Function(BuildContext context, V2TimFriendApplication applicationInfo); class TIMUIKitNewContact extends StatefulWidget { /// the callback when accept friend request @@ -33,12 +33,7 @@ class TIMUIKitNewContact extends StatefulWidget { final NewContactLifeCycle? lifeCycle; const TIMUIKitNewContact( - {Key? key, - this.lifeCycle, - this.onAccept, - this.onRefuse, - this.emptyBuilder, - this.itemBuilder}) + {Key? key, this.lifeCycle, this.onAccept, this.onRefuse, this.emptyBuilder, this.itemBuilder}) : super(key: key); @override @@ -49,28 +44,22 @@ class _TIMUIKitNewContactState extends TIMUIKitState { late TUIFriendShipViewModel model = serviceLocator(); _getShowName(V2TimFriendApplication item) { - return TencentUtils.checkString(item.nickname) ?? - TencentUtils.checkString(item.userID); + return TencentUtils.checkString(item.nickname) ?? TencentUtils.checkString(item.userID); } - Widget _itemBuilder( - BuildContext context, V2TimFriendApplication applicationInfo) { + Widget _itemBuilder(BuildContext context, V2TimFriendApplication applicationInfo) { final theme = Provider.of(context).theme; final showName = _getShowName(applicationInfo); final faceUrl = applicationInfo.faceUrl ?? ""; final applicationText = applicationInfo.addWording ?? ""; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return Material( color: theme.wideBackgroundColor, child: InkWell( onTap: () {}, child: Container( - padding: EdgeInsets.only( - top: isDesktopScreen ? 6 : 10, - left: 16, - right: isDesktopScreen ? 16 : 0), + padding: EdgeInsets.only(top: isDesktopScreen ? 6 : 10, left: 16, right: isDesktopScreen ? 16 : 0), child: Row( children: [ Container( @@ -86,27 +75,19 @@ class _TIMUIKitNewContactState extends TIMUIKitState { child: Container( padding: const EdgeInsets.only(top: 10, bottom: 20), decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Row( mainAxisAlignment: MainAxisAlignment.spaceBetween, children: [ Padding( - padding: EdgeInsets.only( - top: (applicationText.isNotEmpty && isDesktopScreen) - ? 10 - : 0), + padding: EdgeInsets.only(top: (applicationText.isNotEmpty && isDesktopScreen) ? 10 : 0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: MainAxisAlignment.center, children: [ Text( showName, - style: TextStyle( - color: theme.darkTextColor, - fontSize: isDesktopScreen ? 14 : 18), + style: TextStyle(color: theme.darkTextColor, fontSize: isDesktopScreen ? 14 : 18), ), if (applicationText.isNotEmpty && isDesktopScreen) const SizedBox( @@ -115,8 +96,7 @@ class _TIMUIKitNewContactState extends TIMUIKitState { if (applicationText.isNotEmpty && isDesktopScreen) Text( applicationText, - style: TextStyle( - color: theme.weakTextColor, fontSize: 12), + style: TextStyle(color: theme.weakTextColor, fontSize: 12), ), ], ), @@ -126,15 +106,11 @@ class _TIMUIKitNewContactState extends TIMUIKitState { margin: const EdgeInsets.only(right: 8), child: InkWell( child: Container( - padding: const EdgeInsets.symmetric( - horizontal: 14, vertical: 6), + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), color: theme.primaryColor, - border: Border.all( - width: 1, - color: theme.weakTextColor ?? - CommonColor.weakTextColor)), + border: Border.all(width: 1, color: theme.weakTextColor ?? CommonColor.weakTextColor)), child: Text( TIM_t("同意"), style: TextStyle( @@ -163,12 +139,8 @@ class _TIMUIKitNewContactState extends TIMUIKitState { decoration: BoxDecoration( borderRadius: BorderRadius.circular(8), color: Colors.white, - border: Border.all( - width: 1, - color: theme.weakTextColor ?? - CommonColor.weakTextColor)), - padding: const EdgeInsets.symmetric( - horizontal: 14, vertical: 6), + border: Border.all(width: 1, color: theme.weakTextColor ?? CommonColor.weakTextColor)), + padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), child: Text( TIM_t("拒绝"), style: TextStyle( diff --git a/lib/ui/views/TIMUIKitProfile/profile_widget.dart b/lib/ui/views/TIMUIKitProfile/profile_widget.dart index be4b8cc..358cb48 100644 --- a/lib/ui/views/TIMUIKitProfile/profile_widget.dart +++ b/lib/ui/views/TIMUIKitProfile/profile_widget.dart @@ -1,7 +1,10 @@ import 'package:flutter/cupertino.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; enum ProfileWidgetEnum { /// THe card shows the user info of a specific user. @@ -85,13 +88,11 @@ class ProfileWidgetBuilder { /// The switch of if add another user to block list. /// This will not shows when friendship relation not exist as default. - Widget Function(bool isAsBlocked, Function(bool value)? onChange)? - addToBlockListBar; + Widget Function(bool isAsBlocked, Function(bool value)? onChange)? addToBlockListBar; /// The switch of if pin the one-to-one conversation to the top of the conversation list. /// This will not shows when friendship relation not exist as default. - Widget Function(bool isPinned, Function(bool value)? onChange)? - pinConversationBar; + Widget Function(bool isPinned, Function(bool value)? onChange)? pinConversationBar; /// The switch of if mute the message notification from a specific user. /// This will not shows when friendship relation not exist as default. @@ -136,28 +137,23 @@ class ProfileWidgetBuilder { /// The area shows the buttons, /// contains "Send message", "Voice/Video Call", "Delete friend" when has the friend relationship, /// while contains "Add friend" when no relationship exists, as default. - Widget Function(V2TimFriendInfo friendInfo, V2TimConversation conversation, - int friendType, bool isDisturb)? addAndDeleteArea; + Widget Function(V2TimFriendInfo friendInfo, V2TimConversation conversation, int friendType, bool isDisturb)? + addAndDeleteArea; /// Custom area, you may define send message, make calling, search or anything you want here. - Widget Function(bool isFriend, V2TimFriendInfo friendInfo, - V2TimConversation conversation)? customBuilderOne; + Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderOne; /// Custom area, you may define send message, make calling, search or anything you want here. - Widget Function(bool isFriend, V2TimFriendInfo friendInfo, - V2TimConversation conversation)? customBuilderTwo; + Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderTwo; /// Custom area, you may define send message, make calling, search or anything you want here. - Widget Function(bool isFriend, V2TimFriendInfo friendInfo, - V2TimConversation conversation)? customBuilderThree; + Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderThree; /// Custom area, you may define send message, make calling, search or anything you want here. - Widget Function(bool isFriend, V2TimFriendInfo friendInfo, - V2TimConversation conversation)? customBuilderFour; + Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderFour; /// Custom area, you may define send message, make calling, search or anything you want here. - Widget Function(bool isFriend, V2TimFriendInfo friendInfo, - V2TimConversation conversation)? customBuilderFive; + Widget Function(bool isFriend, V2TimFriendInfo friendInfo, V2TimConversation conversation)? customBuilderFive; ProfileWidgetBuilder( {this.operationDivider, diff --git a/lib/ui/views/TIMUIKitProfile/tim_uikit_profile.dart b/lib/ui/views/TIMUIKitProfile/tim_uikit_profile.dart index 43825bc..856b8c5 100644 --- a/lib/ui/views/TIMUIKitProfile/tim_uikit_profile.dart +++ b/lib/ui/views/TIMUIKitProfile/tim_uikit_profile.dart @@ -2,9 +2,12 @@ import 'package:flutter/material.dart'; import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/life_cycle/profile_life_cycle.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_profile_view_model.dart'; @@ -19,11 +22,7 @@ import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitProfile/widget/tim_uik typedef OnSelfAvatarTap = void Function(); typedef ProfileBuilder = Widget Function( - BuildContext context, - V2TimFriendInfo userInfo, - V2TimConversation conversation, - int friendType, - bool isMute); + BuildContext context, V2TimFriendInfo userInfo, V2TimConversation conversation, int friendType, bool isMute); class TIMUIKitProfile extends StatefulWidget { /// user ID @@ -31,23 +30,19 @@ class TIMUIKitProfile extends StatefulWidget { /// [Deprecated:] the builder for custom operation list. /// [operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead. - final Widget Function( - BuildContext context, - V2TimFriendInfo friendInfo, - V2TimConversation conversation, - int friendType, - bool isMute)? operationListBuilder; + final Widget Function(BuildContext context, V2TimFriendInfo friendInfo, V2TimConversation conversation, + int friendType, bool isMute)? operationListBuilder; /// [Deprecated:] The builder for custom bottom operation area. /// [operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead. - final Widget Function(BuildContext context, V2TimFriendInfo? friendInfo, - V2TimConversation? conversation, int friendType)? bottomOperationBuilder; + final Widget Function( + BuildContext context, V2TimFriendInfo? friendInfo, V2TimConversation? conversation, int friendType)? + bottomOperationBuilder; /// [Deprecated:] Callback when clicking profile detail card. /// This widget will no longer shows the personal info card and can not jump to personal info page automatically, /// please navigate to your custom personal info page manually and directly, you may refer to our demo. - final void Function(BuildContext context, V2TimUserFullInfo? userFullInfo)? - handleProfileDetailCardTap; + final void Function(BuildContext context, V2TimUserFullInfo? userFullInfo)? handleProfileDetailCardTap; /// Profile Controller final TIMUIKitProfileController? controller; @@ -90,11 +85,9 @@ class TIMUIKitProfile extends StatefulWidget { const TIMUIKitProfile( {Key? key, required this.userID, - @Deprecated( - "[operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead") + @Deprecated("[operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead") this.operationListBuilder, - @Deprecated( - "[operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead") + @Deprecated("[operationListBuilder] and [bottomOperationBuilder] merged into [builder], please use it instead") this.bottomOperationBuilder, @Deprecated( "This widget will no longer shows the personal info card and can not jump to personal info page automatically, please navigate to your custom personal info page manually and directly, you may refer to our demo") @@ -139,11 +132,9 @@ class _TIMUIKitProfileState extends TIMUIKitState { @override void didUpdateWidget(covariant TIMUIKitProfile oldWidget) { super.didUpdateWidget(oldWidget); - if (oldWidget.userID != widget.userID || - _model.userProfile?.friendInfo?.userID != widget.userID) { + if (oldWidget.userID != widget.userID || _model.userProfile?.friendInfo?.userID != widget.userID) { _model.userProfile = null; - _model.loadData( - userID: widget.userID, isNeedConversation: !widget.isSelf); + _model.loadData(userID: widget.userID, isNeedConversation: !widget.isSelf); } } @@ -162,14 +153,12 @@ class _TIMUIKitProfileState extends TIMUIKitState { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final theme = value.theme; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return ChangeNotifierProvider.value( value: _model, child: Consumer( builder: (context, value, child) { - final TUIProfileViewModel model = - Provider.of(context); + final TUIProfileViewModel model = Provider.of(context); _controller.model = model; final V2TimFriendInfo? userInfo = model.userProfile?.friendInfo; @@ -188,25 +177,20 @@ class _TIMUIKitProfileState extends TIMUIKitState { type: 1, userID: widget.userID, faceUrl: model.userProfile?.friendInfo?.userProfile?.faceUrl, - showName: TencentUtils.checkString( - model.userProfile?.friendInfo?.friendRemark) ?? - TencentUtils.checkString(model - .userProfile?.friendInfo?.userProfile?.nickName) ?? + showName: TencentUtils.checkString(model.userProfile?.friendInfo?.friendRemark) ?? + TencentUtils.checkString(model.userProfile?.friendInfo?.userProfile?.nickName) ?? widget.userID); - final TUISelfInfoViewModel _selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel _selfInfoViewModel = serviceLocator(); final isFriend = model.friendType != 0; - final isSelf = (model.userProfile?.friendInfo?.userID == - _selfInfoViewModel.loginInfo?.userID); + final isSelf = (model.userProfile?.friendInfo?.userID == _selfInfoViewModel.loginInfo?.userID); final isMute = model.isDisturb ?? false; Widget profilePage({required Widget child}) { return Container( color: isDesktopScreen ? theme.wideBackgroundColor : null, child: SingleChildScrollView( - physics: const BouncingScrollPhysics( - parent: AlwaysScrollableScrollPhysics()), + physics: const BouncingScrollPhysics(parent: AlwaysScrollableScrollPhysics()), child: Container( child: child, ), @@ -234,8 +218,7 @@ class _TIMUIKitProfileState extends TIMUIKitState { title: TIM_t("修改备注名"), tips: TIM_t("仅限汉字、英文、数字和下划线"), onSubmitted: (String remark) async { - final res = - await _controller.updateRemarks(widget.userID, remark); + final res = await _controller.updateRemarks(widget.userID, remark); if (res.code == 0) { widget.lifeCycle?.didRemarkUpdated(remark); } @@ -255,47 +238,37 @@ class _TIMUIKitProfileState extends TIMUIKitState { } List _renderWidgetsWithOrder(List order) { - final ProfileWidgetBuilder? customBuilder = - widget.profileWidgetBuilder; + final ProfileWidgetBuilder? customBuilder = widget.profileWidgetBuilder; return order.map((element) { switch (element) { case ProfileWidgetEnum.userInfoCard: return (customBuilder?.userInfoCard != null ? customBuilder?.userInfoCard!(userInfo.userProfile) - : TIMUIKitProfileUserInfoCard( - userInfo: userInfo.userProfile))!; + : TIMUIKitProfileUserInfoCard(userInfo: userInfo.userProfile))!; case ProfileWidgetEnum.addToBlockListBar: if (isSelf) { return Container(); } return (customBuilder?.addToBlockListBar != null - ? customBuilder?.addToBlockListBar!( - model.isAddToBlackList ?? false, handleAddToBlockList) + ? customBuilder?.addToBlockListBar!(model.isAddToBlackList ?? false, handleAddToBlockList) : TIMUIKitProfileWidget.addToBlackListBar( - model.isAddToBlackList ?? false, - context, - handleAddToBlockList, - widget.smallCardMode))!; + model.isAddToBlackList ?? false, context, handleAddToBlockList, widget.smallCardMode))!; case ProfileWidgetEnum.pinConversationBar: // if (!isFriend) { // return Container(); // } return (customBuilder?.pinConversationBar != null - ? customBuilder?.pinConversationBar!( - conversation.isPinned ?? false, handlePinConversation) + ? customBuilder?.pinConversationBar!(conversation.isPinned ?? false, handlePinConversation) : TIMUIKitProfileWidget.pinConversationBar( - conversation.isPinned ?? false, - context, - handlePinConversation, - widget.smallCardMode))!; + conversation.isPinned ?? false, context, handlePinConversation, widget.smallCardMode))!; case ProfileWidgetEnum.messageMute: // if (!isFriend) { // return Container(); // } return (customBuilder?.messageMute != null ? customBuilder?.messageMute!(isMute, handleMuteMessage) - : TIMUIKitProfileWidget.messageDisturb(context, isMute, - handleMuteMessage, widget.smallCardMode))!; + : TIMUIKitProfileWidget.messageDisturb( + context, isMute, handleMuteMessage, widget.smallCardMode))!; case ProfileWidgetEnum.searchBar: return (customBuilder?.searchBar != null ? customBuilder?.searchBar!(conversation) @@ -305,44 +278,30 @@ class _TIMUIKitProfileState extends TIMUIKitState { return (customBuilder?.portraitBar != null ? customBuilder?.portraitBar!(userInfo.userProfile) : TIMUIKitProfileWidget.portraitBar( - TIMUIKitProfileWidget.defaultPortraitWidget( - userInfo.userProfile, widget.smallCardMode), + TIMUIKitProfileWidget.defaultPortraitWidget(userInfo.userProfile, widget.smallCardMode), widget.smallCardMode))!; case ProfileWidgetEnum.nicknameBar: return (customBuilder?.nicknameBar != null - ? customBuilder - ?.nicknameBar!(userInfo.userProfile?.nickName ?? "") - : TIMUIKitProfileWidget.nicknameBar( - userInfo.userProfile?.nickName ?? "", - widget.smallCardMode))!; + ? customBuilder?.nicknameBar!(userInfo.userProfile?.nickName ?? "") + : TIMUIKitProfileWidget.nicknameBar(userInfo.userProfile?.nickName ?? "", widget.smallCardMode))!; case ProfileWidgetEnum.userAccountBar: return (customBuilder?.userAccountBar != null - ? customBuilder - ?.userAccountBar!(userInfo.userProfile?.userID ?? "") + ? customBuilder?.userAccountBar!(userInfo.userProfile?.userID ?? "") : TIMUIKitProfileWidget.userAccountBar( - userInfo.userProfile?.userID ?? "", - widget.smallCardMode))!; + userInfo.userProfile?.userID ?? "", widget.smallCardMode))!; case ProfileWidgetEnum.signatureBar: return (customBuilder?.signatureBar != null - ? customBuilder?.signatureBar!( - userInfo.userProfile?.selfSignature ?? "") + ? customBuilder?.signatureBar!(userInfo.userProfile?.selfSignature ?? "") : TIMUIKitProfileWidget.signatureBar( - userInfo.userProfile?.selfSignature ?? "", - widget.smallCardMode))!; + userInfo.userProfile?.selfSignature ?? "", widget.smallCardMode))!; case ProfileWidgetEnum.genderBar: return (customBuilder?.genderBar != null - ? customBuilder - ?.genderBar!(userInfo.userProfile?.gender ?? 0) - : TIMUIKitProfileWidget.genderBar( - userInfo.userProfile?.gender ?? 0, - widget.smallCardMode))!; + ? customBuilder?.genderBar!(userInfo.userProfile?.gender ?? 0) + : TIMUIKitProfileWidget.genderBar(userInfo.userProfile?.gender ?? 0, widget.smallCardMode))!; case ProfileWidgetEnum.birthdayBar: return (customBuilder?.birthdayBar != null - ? customBuilder - ?.birthdayBar!(userInfo.userProfile?.birthday) - : TIMUIKitProfileWidget.birthdayBar( - userInfo.userProfile?.birthday, - widget.smallCardMode))!; + ? customBuilder?.birthdayBar!(userInfo.userProfile?.birthday) + : TIMUIKitProfileWidget.birthdayBar(userInfo.userProfile?.birthday, widget.smallCardMode))!; case ProfileWidgetEnum.addAndDeleteArea: if (isSelf) { return Container(); @@ -381,50 +340,39 @@ class _TIMUIKitProfileState extends TIMUIKitState { : TIMUIKitProfileWidget.operationDivider( color: theme.weakDividerColor, height: isDesktopScreen ? 1 : 10, - margin: isDesktopScreen - ? EdgeInsets.symmetric( - vertical: widget.smallCardMode ? 4 : 20) - : null))!; + margin: + isDesktopScreen ? EdgeInsets.symmetric(vertical: widget.smallCardMode ? 4 : 20) : null))!; case ProfileWidgetEnum.remarkBar: if (!isFriend) { return Container(); } return (customBuilder?.remarkBar != null - ? customBuilder?.remarkBar!( - userInfo.friendRemark ?? "", handleTapRemarkBar) + ? customBuilder?.remarkBar!(userInfo.friendRemark ?? "", handleTapRemarkBar) : TIMUIKitProfileWidget.remarkBar( - context, - userInfo.friendRemark ?? "", - handleTapRemarkBar, - widget.smallCardMode))!; + context, userInfo.friendRemark ?? "", handleTapRemarkBar, widget.smallCardMode))!; case ProfileWidgetEnum.customBuilderOne: return (customBuilder?.customBuilderOne != null - ? customBuilder?.customBuilderOne!( - isFriend, userInfo, conversation) + ? customBuilder?.customBuilderOne!(isFriend, userInfo, conversation) // Please define the corresponding custom widget in `profileWidgetBuilder` before using it here. : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; case ProfileWidgetEnum.customBuilderTwo: return (customBuilder?.customBuilderTwo != null - ? customBuilder?.customBuilderTwo!( - isFriend, userInfo, conversation) + ? customBuilder?.customBuilderTwo!(isFriend, userInfo, conversation) // Please define the corresponding custom widget in `profileWidgetBuilder` before using it here. : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; case ProfileWidgetEnum.customBuilderThree: return (customBuilder?.customBuilderThree != null - ? customBuilder?.customBuilderThree!( - isFriend, userInfo, conversation) + ? customBuilder?.customBuilderThree!(isFriend, userInfo, conversation) // Please define the corresponding custom widget in `profileWidgetBuilder` before using it here. : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; case ProfileWidgetEnum.customBuilderFour: return (customBuilder?.customBuilderFour != null - ? customBuilder?.customBuilderFour!( - isFriend, userInfo, conversation) + ? customBuilder?.customBuilderFour!(isFriend, userInfo, conversation) // Please define the corresponding custom widget in `profileWidgetBuilder` before using it here. : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; case ProfileWidgetEnum.customBuilderFive: return (customBuilder?.customBuilderFive != null - ? customBuilder?.customBuilderFive!( - isFriend, userInfo, conversation) + ? customBuilder?.customBuilderFive!(isFriend, userInfo, conversation) // Please define the corresponding custom widget in `profileWidgetBuilder` before using it here. : Text(TIM_t("如使用自定义区域,请在profileWidgetBuilder传入对应组件")))!; @@ -435,14 +383,11 @@ class _TIMUIKitProfileState extends TIMUIKitState { } if (widget.builder != null) { - return widget.builder!( - context, userInfo, conversation, value.friendType, isMute); + return widget.builder!(context, userInfo, conversation, value.friendType, isMute); } else if (widget.profileWidgetsOrder != null) { return profilePage( child: Column( - children: [ - ..._renderWidgetsWithOrder(widget.profileWidgetsOrder!) - ], + children: [..._renderWidgetsWithOrder(widget.profileWidgetsOrder!)], ), ); } else { diff --git a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card.dart b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card.dart index 7cd4761..9424cba 100644 --- a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card.dart +++ b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card.dart @@ -1,7 +1,8 @@ // ignore_for_file: deprecated_member_use_from_same_package import 'package:flutter/cupertino.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_narrow.dart'; @@ -19,8 +20,9 @@ class TIMUIKitProfileUserInfoCard extends StatelessWidget { const TIMUIKitProfileUserInfoCard( {Key? key, this.userInfo, - @Deprecated("This info card can no longer navigate to default personal profile page automatically, please deal with it manually.") - this.isJumpToPersonalProfile = false, + @Deprecated( + "This info card can no longer navigate to default personal profile page automatically, please deal with it manually.") + this.isJumpToPersonalProfile = false, this.showArrowRightIcon = false, this.onClickAvatar}) : super(key: key); diff --git a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_narrow.dart b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_narrow.dart index b01cf4e..2024241 100644 --- a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_narrow.dart +++ b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_narrow.dart @@ -1,6 +1,7 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.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_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/avatar.dart'; @@ -19,8 +20,9 @@ class TIMUIKitProfileUserInfoCardNarrow extends TIMUIKitStatelessWidget { {Key? key, this.onClickAvatar, this.userInfo, - @Deprecated("This info card can no longer navigate to default personal profile page automatically, please deal with it manually.") - this.isJumpToPersonalProfile = false, + @Deprecated( + "This info card can no longer navigate to default personal profile page automatically, please deal with it manually.") + this.isJumpToPersonalProfile = false, this.showArrowRightIcon = false}) : super(key: key); @@ -32,9 +34,8 @@ class TIMUIKitProfileUserInfoCardNarrow extends TIMUIKitStatelessWidget { final signature = userInfo?.selfSignature; final showName = nickName != "" ? nickName : userInfo?.userID; final option1 = signature; - final signatureText = option1 != null - ? TIM_t_para("个性签名: {{option1}}", "个性签名: $option1")(option1: option1) - : TIM_t("暂无个性签名"); + final signatureText = + option1 != null ? TIM_t_para("个性签名: {{option1}}", "个性签名: $option1")(option1: option1) : TIM_t("暂无个性签名"); return Container( padding: const EdgeInsets.symmetric(vertical: 12, horizontal: 16), @@ -76,25 +77,20 @@ class TIMUIKitProfileUserInfoCardNarrow extends TIMUIKitStatelessWidget { children: [ Text( "ID: ", - style: - TextStyle(fontSize: 13, color: theme.weakTextColor), + style: TextStyle(fontSize: 13, color: theme.weakTextColor), ), SelectableText( userInfo?.userID ?? "", - style: - TextStyle(fontSize: 13, color: theme.weakTextColor), + style: TextStyle(fontSize: 13, color: theme.weakTextColor), ), ], ), ), - SelectableText(signatureText, - style: TextStyle(fontSize: 13, color: theme.weakTextColor)) + SelectableText(signatureText, style: TextStyle(fontSize: 13, color: theme.weakTextColor)) ], ), ), - showArrowRightIcon - ? const Icon(Icons.keyboard_arrow_right) - : Container() + showArrowRightIcon ? const Icon(Icons.keyboard_arrow_right) : Container() ], ), ); diff --git a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_wide.dart b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_wide.dart index 0a0b9a1..3a3a109 100644 --- a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_wide.dart +++ b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_userinfo_card/tim_uikit_profile_userinfo_card_wide.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.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_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/avatar.dart'; @@ -19,8 +20,9 @@ class TIMUIKitProfileUserInfoCardWide extends TIMUIKitStatelessWidget { {Key? key, this.userInfo, this.onClickAvatar, - @Deprecated("This info card can no longer navigate to default personal profile page automatically, please deal with it manually.") - this.isJumpToPersonalProfile = false, + @Deprecated( + "This info card can no longer navigate to default personal profile page automatically, please deal with it manually.") + this.isJumpToPersonalProfile = false, this.showArrowRightIcon = false}) : super(key: key); @@ -55,22 +57,19 @@ class TIMUIKitProfileUserInfoCardWide extends TIMUIKitStatelessWidget { children: [ Text( "ID: ", - style: - TextStyle(fontSize: 12, color: theme.weakTextColor), + style: TextStyle(fontSize: 12, color: theme.weakTextColor), ), - Expanded(child: SelectableText( + Expanded( + child: SelectableText( userInfo?.userID ?? "", - style: - TextStyle(fontSize: 12, color: theme.weakTextColor), + style: TextStyle(fontSize: 12, color: theme.weakTextColor), )), ], ), if (signature != null) Container( margin: const EdgeInsets.only(top: 18), - child: SelectableText(signature, - style: TextStyle( - fontSize: 14, color: hexToColor("7f7f7f"))), + child: SelectableText(signature, style: TextStyle(fontSize: 14, color: hexToColor("7f7f7f"))), ) ], ), @@ -93,9 +92,7 @@ class TIMUIKitProfileUserInfoCardWide extends TIMUIKitStatelessWidget { ), ), ), - showArrowRightIcon - ? const Icon(Icons.keyboard_arrow_right) - : Container() + showArrowRightIcon ? const Icon(Icons.keyboard_arrow_right) : Container() ], ) ], diff --git a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_widget.dart b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_widget.dart index 21ad10a..2cd8cdf 100644 --- a/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_widget.dart +++ b/lib/ui/views/TIMUIKitProfile/widget/tim_uikit_profile_widget.dart @@ -3,9 +3,12 @@ import 'dart:math'; import 'package:flutter/material.dart'; import 'package:intl/intl.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_full_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_full_info.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_class.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; @@ -14,11 +17,9 @@ import 'package:tencent_cloud_chat_uikit/theme/color.dart'; import 'package:tencent_cloud_chat_uikit/theme/tui_theme.dart'; class TIMUIKitProfileWidget extends TIMUIKitClass { - static final bool isDesktopScreen = - TUIKitScreenUtils.getFormFactor() == DeviceType.Desktop; + static final bool isDesktopScreen = TUIKitScreenUtils.getFormFactor() == DeviceType.Desktop; - static Widget operationDivider( - {Color? color, double? height, EdgeInsetsGeometry? margin}) { + static Widget operationDivider({Color? color, double? height, EdgeInsetsGeometry? margin}) { return Container( color: color, margin: margin, @@ -27,21 +28,15 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { } /// Remarks - static Widget remarkBar( - BuildContext context, - String remark, - Function({Offset? offset, String? initText})? handleTap, + static Widget remarkBar(BuildContext context, String remark, Function({Offset? offset, String? initText})? handleTap, bool smallCardMode) { final GlobalKey key = GlobalKey(); return InkWell( onTapDown: (details) { if (handleTap != null) { handleTap( - offset: Offset( - min(details.globalPosition.dx, - MediaQuery.of(context).size.width - 400), - min(details.globalPosition.dy, - MediaQuery.of(context).size.height - 100)), + offset: Offset(min(details.globalPosition.dx, MediaQuery.of(context).size.width - 400), + min(details.globalPosition.dy, MediaQuery.of(context).size.height - 100)), initText: remark); } }, @@ -51,15 +46,14 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { isEmpty: remark.isEmpty, wideEditText: TIM_t("设置备注名"), operationName: TIM_t("备注名"), - operationRightWidget: - Text(remark, textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(remark, textAlign: isDesktopScreen ? null : TextAlign.end), ), ); } /// add to block list - static Widget addToBlackListBar(bool value, BuildContext context, - Function(bool value)? onChanged, bool smallCardMode) { + static Widget addToBlackListBar( + bool value, BuildContext context, Function(bool value)? onChanged, bool smallCardMode) { return TIMUIKitOperationItem( smallCardMode: smallCardMode, isEmpty: false, @@ -75,8 +69,8 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { } /// pin the conversation to the top - static Widget pinConversationBar(bool value, BuildContext context, - Function(bool value)? onChanged, bool smallCardMode) { + static Widget pinConversationBar( + bool value, BuildContext context, Function(bool value)? onChanged, bool smallCardMode) { return TIMUIKitOperationItem( smallCardMode: smallCardMode, isEmpty: false, @@ -92,8 +86,8 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { } /// message disturb - static Widget messageDisturb(BuildContext context, bool isDisturb, - Function(bool value)? onChanged, bool smallCardMode) { + static Widget messageDisturb( + BuildContext context, bool isDisturb, Function(bool value)? onChanged, bool smallCardMode) { return TIMUIKitOperationItem( smallCardMode: smallCardMode, isEmpty: false, @@ -121,8 +115,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { isEmpty: isEmpty, operationName: operationName, type: type, - operationRightWidget: Text(operationText ?? "", - textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(operationText ?? "", textAlign: isDesktopScreen ? null : TextAlign.end), operationValue: operationValue, onSwitchChange: onSwitchChange, ); @@ -163,8 +156,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { } /// defaultPortraitWidget - static Widget defaultPortraitWidget( - V2TimUserFullInfo? userInfo, bool smallCardMode) { + static Widget defaultPortraitWidget(V2TimUserFullInfo? userInfo, bool smallCardMode) { return SizedBox( width: 48, height: 48, @@ -189,8 +181,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { isEmpty: nickName.isEmpty, showAllowEditStatus: false, operationName: TIM_t("昵称"), - operationRightWidget: - Text(nickName, textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(nickName, textAlign: isDesktopScreen ? null : TextAlign.end), ), ); } @@ -203,8 +194,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { isEmpty: false, showAllowEditStatus: false, operationName: TIM_t("账号"), - operationRightWidget: SelectableText(userNum, - textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: SelectableText(userNum, textAlign: isDesktopScreen ? null : TextAlign.end), ), ); } @@ -217,8 +207,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { isEmpty: false, showAllowEditStatus: false, operationName: TIM_t("个性签名"), - operationRightWidget: - Text(signature, textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(signature, textAlign: isDesktopScreen ? null : TextAlign.end), ), ); } @@ -236,8 +225,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { isEmpty: false, showAllowEditStatus: false, operationName: TIM_t("性别"), - operationRightWidget: Text(genderMap[gender], - textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(genderMap[gender], textAlign: isDesktopScreen ? null : TextAlign.end), ), ); } @@ -254,8 +242,7 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { smallCardMode: smallCardMode, isEmpty: false, operationName: TIM_t("性别"), - operationRightWidget: Text(genderMap[gender], - textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(genderMap[gender], textAlign: isDesktopScreen ? null : TextAlign.end), ), ); } @@ -269,16 +256,14 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { smallCardMode: smallCardMode, isEmpty: false, operationName: TIM_t("生日"), - operationRightWidget: Text(formatter.format(date), - textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(formatter.format(date), textAlign: isDesktopScreen ? null : TextAlign.end), ); } catch (e) { return TIMUIKitOperationItem( smallCardMode: smallCardMode, isEmpty: false, operationName: TIM_t("生日"), - operationRightWidget: - Text(TIM_t("未填写"), textAlign: isDesktopScreen ? null : TextAlign.end), + operationRightWidget: Text(TIM_t("未填写"), textAlign: isDesktopScreen ? null : TextAlign.end), ); } } @@ -302,10 +287,8 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { child: Container( alignment: Alignment.center, padding: const EdgeInsets.symmetric(vertical: 15), - decoration: BoxDecoration( - color: Colors.white, - border: - Border(bottom: BorderSide(color: theme.weakDividerColor))), + decoration: + BoxDecoration(color: Colors.white, border: Border(bottom: BorderSide(color: theme.weakDividerColor))), child: Text( TIM_t("删除好友"), style: TextStyle(color: theme.cautionColor, fontSize: 17), @@ -320,15 +303,11 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { // padding: const EdgeInsets.symmetric(vertical: 15), decoration: BoxDecoration( color: Colors.white, - border: Border( - bottom: BorderSide( - color: theme.weakDividerColor ?? - CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Row(children: [ Expanded( child: TextButton( - child: Text(TIM_t("加为好友"), - style: TextStyle(color: theme.primaryColor, fontSize: 17)), + child: Text(TIM_t("加为好友"), style: TextStyle(color: theme.primaryColor, fontSize: 17)), onPressed: () { handleAddFriend(); }), @@ -362,15 +341,13 @@ class TIMUIKitProfileWidget extends TIMUIKitClass { style: TextStyle(color: color), ), style: ButtonStyle( - minimumSize: - MaterialStateProperty.all(const Size(160, 40)), + minimumSize: MaterialStateProperty.all(const Size(160, 40)), )) : ElevatedButton( onPressed: onPressed, child: Text(text), style: ButtonStyle( - minimumSize: - MaterialStateProperty.all(const Size(180, 46)), + minimumSize: MaterialStateProperty.all(const Size(180, 46)), backgroundColor: MaterialStateProperty.all(color)), ), ); diff --git a/lib/ui/views/TIMUIKitSearch/tim_uikit_search.dart b/lib/ui/views/TIMUIKitSearch/tim_uikit_search.dart index dc429f1..8212b72 100644 --- a/lib/ui/views/TIMUIKitSearch/tim_uikit_search.dart +++ b/lib/ui/views/TIMUIKitSearch/tim_uikit_search.dart @@ -1,10 +1,15 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result_item.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info_result.dart'; +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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result_item.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_result_item.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_search_view_model.dart'; @@ -29,12 +34,10 @@ class TIMUIKitSearch extends StatefulWidget { /// [Deprecated] : You are supposed to use [onEnterSearchInConversation], /// though the effects are the same. - final Function(V2TimConversation conversation, String initKeyword)? - onEnterConversation; + final Function(V2TimConversation conversation, String initKeyword)? onEnterConversation; /// On click each conversation from 'Chat history' and searching for historical message in it. - final Function(V2TimConversation conversation, String initKeyword)? - onEnterSearchInConversation; + final Function(V2TimConversation conversation, String initKeyword)? onEnterSearchInConversation; final VoidCallback? onBack; @@ -43,10 +46,11 @@ class TIMUIKitSearch extends StatefulWidget { const TIMUIKitSearch( {required this.onTapConversation, Key? key, - @Deprecated("You are supposed to use [TIMUIKitSearchMsgDetail], if you tend to search inside a specific conversation, includes c2c and group") - this.conversation, + @Deprecated( + "You are supposed to use [TIMUIKitSearchMsgDetail], if you tend to search inside a specific conversation, includes c2c and group") + this.conversation, @Deprecated("You are supposed to use [onEnterSearchInConversation], though the effects are the same.") - this.onEnterConversation, + this.onEnterConversation, this.isAutoFocus = true, this.onEnterSearchInConversation, this.onBack}) @@ -61,11 +65,7 @@ class TIMUIKitSearchState extends TIMUIKitState { final model = serviceLocator(); final FocusNode focusNode = FocusNode(); GlobalKey inputTextField = GlobalKey(); - List searchTypes = [ - SearchType.group, - SearchType.contact, - SearchType.history - ]; + List searchTypes = [SearchType.group, SearchType.contact, SearchType.history]; @override void initState() { @@ -80,19 +80,12 @@ class TIMUIKitSearchState extends TIMUIKitState { return TIMUIKitSearchNotSupport(); } return MultiProvider( - providers: [ - ChangeNotifierProvider.value( - value: serviceLocator()) - ], + providers: [ChangeNotifierProvider.value(value: serviceLocator())], builder: (context, w) { - List friendResultList = - Provider.of(context).friendList ?? []; - List msgList = - Provider.of(context).msgList ?? []; - List groupList = - Provider.of(context).groupList ?? []; - int totalMsgCount = - Provider.of(context).totalMsgCount; + List friendResultList = Provider.of(context).friendList ?? []; + List msgList = Provider.of(context).msgList ?? []; + List groupList = Provider.of(context).groupList ?? []; + int totalMsgCount = Provider.of(context).totalMsgCount; return GestureDetector( onTap: () { FocusScopeNode currentFocus = FocusScope.of(context); @@ -123,14 +116,9 @@ class TIMUIKitSearchState extends TIMUIKitState { child: SingleChildScrollView( child: Column( children: [ - if ((friendResultList.isEmpty || - !(searchTypes.contains(SearchType.contact))) && - (groupList.isEmpty || - !(searchTypes - .contains(SearchType.group))) && - (totalMsgCount == 0 || - !(searchTypes - .contains(SearchType.history)))) + if ((friendResultList.isEmpty || !(searchTypes.contains(SearchType.contact))) && + (groupList.isEmpty || !(searchTypes.contains(SearchType.group))) && + (totalMsgCount == 0 || !(searchTypes.contains(SearchType.history)))) TIMUIKitSearchIndicator( typeList: searchTypes, onChange: (list) { @@ -143,10 +131,8 @@ class TIMUIKitSearchState extends TIMUIKitState { TIMUIKitSearchFriend( onTapConversation: (conversation, message) { focusNode.unfocus(); - Future.delayed( - const Duration(milliseconds: 100), () { - widget.onTapConversation( - conversation, message); + Future.delayed(const Duration(milliseconds: 100), () { + widget.onTapConversation(conversation, message); }); }, friendResultList: friendResultList), @@ -155,8 +141,7 @@ class TIMUIKitSearchState extends TIMUIKitState { groupList: groupList, onTapConversation: (conversation, message) { focusNode.unfocus(); - Future.delayed(const Duration(milliseconds: 100), - () { + Future.delayed(const Duration(milliseconds: 100), () { widget.onTapConversation(conversation, message); }); }, @@ -167,15 +152,11 @@ class TIMUIKitSearchState extends TIMUIKitState { keyword: textEditingController.text, totalMsgCount: totalMsgCount, msgList: msgList, - onEnterConversation: - (V2TimConversation conversation, - String keyword) { + onEnterConversation: (V2TimConversation conversation, String keyword) { if (widget.onEnterSearchInConversation != null) { - widget.onEnterSearchInConversation!( - conversation, keyword); + widget.onEnterSearchInConversation!(conversation, keyword); } else if (widget.onEnterConversation != null) { - widget.onEnterConversation!( - conversation, keyword); + widget.onEnterConversation!(conversation, keyword); } }, ), diff --git a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_friend.dart b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_friend.dart index 3f54484..0a9116b 100644 --- a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_friend.dart +++ b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_friend.dart @@ -5,9 +5,12 @@ import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info_result.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_info_result.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitSearch/pureUI/tim_uikit_search_item.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitSearch/pureUI/tim_uikit_search_folder.dart'; @@ -19,11 +22,7 @@ class TIMUIKitSearchFriend extends StatefulWidget { List friendResultList; final Function(V2TimConversation, V2TimMessage?) onTapConversation; - TIMUIKitSearchFriend( - {required this.friendResultList, - Key? key, - required this.onTapConversation}) - : super(key: key); + TIMUIKitSearchFriend({required this.friendResultList, Key? key, required this.onTapConversation}) : super(key: key); @override State createState() => TIMUIKitSearchFriendState(); @@ -46,31 +45,26 @@ class TIMUIKitSearchFriendState extends TIMUIKitState { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { - List _conversationList = - Provider.of(context).conversationList; + List _conversationList = Provider.of(context).conversationList; - List filteredFriendResultList = - widget.friendResultList.where((friend) { - int index = _conversationList - .indexWhere((conv) => friend.friendInfo?.userID == conv?.userID); + List filteredFriendResultList = widget.friendResultList.where((friend) { + int index = _conversationList.indexWhere((conv) => friend.friendInfo?.userID == conv?.userID); return index == -1 ? false : true; }).toList(); List halfFilteredFriendResultList = isShowAll ? filteredFriendResultList - : filteredFriendResultList.sublist( - 0, min(defaultShowLines, filteredFriendResultList.length)); + : filteredFriendResultList.sublist(0, min(defaultShowLines, filteredFriendResultList.length)); if (filteredFriendResultList.isNotEmpty) { return TIMUIKitSearchFolder(folderName: TIM_t("联系人"), children: [ ...halfFilteredFriendResultList.map((conv) { - int convIndex = _conversationList - .indexWhere((item) => conv.friendInfo?.userID == item?.userID); + int convIndex = _conversationList.indexWhere((item) => conv.friendInfo?.userID == item?.userID); V2TimConversation conversation = _conversationList[convIndex]!; late String? showNickName; if (conv.friendInfo?.friendRemark != null && conv.friendInfo?.friendRemark != "") { showNickName = conv.friendInfo?.friendRemark; - } else if (conv.friendInfo?.userProfile?.nickName != null && conv.friendInfo?.userProfile?.nickName != "") { + } else if (conv.friendInfo?.userProfile?.nickName != null && conv.friendInfo?.userProfile?.nickName != "") { showNickName = conv.friendInfo?.userProfile?.nickName; } else { showNickName = conv.friendInfo?.userID; @@ -82,7 +76,6 @@ class TIMUIKitSearchFriendState extends TIMUIKitState { }, faceUrl: conv.friendInfo?.userProfile?.faceUrl ?? "", showName: "", - lineOne: conversation.userID!, lineTwo: TIM_t("昵称") + ":" + showNickName!, ); diff --git a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_group.dart b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_group.dart index a05a3ac..6773417 100644 --- a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_group.dart +++ b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_group.dart @@ -5,9 +5,12 @@ import 'dart:math'; import 'package:flutter/cupertino.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitSearch/pureUI/tim_uikit_search_item.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitSearch/pureUI/tim_uikit_search_folder.dart'; @@ -19,9 +22,7 @@ class TIMUIKitSearchGroup extends StatefulWidget { List groupList; final Function(V2TimConversation, V2TimMessage?) onTapConversation; - TIMUIKitSearchGroup( - {required this.groupList, Key? key, required this.onTapConversation}) - : super(key: key); + TIMUIKitSearchGroup({required this.groupList, Key? key, required this.onTapConversation}) : super(key: key); @override State createState() => TIMUIKitSearchGroupState(); @@ -44,26 +45,21 @@ class TIMUIKitSearchGroupState extends TIMUIKitState { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { - List _conversationList = - Provider.of(context).conversationList; + List _conversationList = Provider.of(context).conversationList; - List filteredGroupResultList = - widget.groupList.where((group) { - int index = _conversationList - .indexWhere((conv) => group.groupID == conv?.groupID); + List filteredGroupResultList = widget.groupList.where((group) { + int index = _conversationList.indexWhere((conv) => group.groupID == conv?.groupID); return index == -1 ? false : true; }).toList(); List halfFilteredGroupResultList = isShowAll ? filteredGroupResultList - : filteredGroupResultList.sublist( - 0, min(defaultShowLines, filteredGroupResultList.length)); + : filteredGroupResultList.sublist(0, min(defaultShowLines, filteredGroupResultList.length)); if (filteredGroupResultList.isNotEmpty) { return TIMUIKitSearchFolder(folderName: TIM_t("群聊"), children: [ ...halfFilteredGroupResultList.map((group) { - int convIndex = _conversationList - .indexWhere((item) => group.groupID == item?.groupID); + int convIndex = _conversationList.indexWhere((item) => group.groupID == item?.groupID); V2TimConversation conversation = _conversationList[convIndex]!; return TIMUIKitSearchItem( onClick: () { @@ -71,10 +67,7 @@ class TIMUIKitSearchGroupState extends TIMUIKitState { }, faceUrl: conversation.faceUrl ?? group.faceUrl ?? "", showName: "", - lineOne: conversation.showName ?? - group.groupName ?? - conversation.groupID ?? - "", + lineOne: conversation.showName ?? group.groupName ?? conversation.groupID ?? "", ); }).toList(), _renderShowALl(filteredGroupResultList.length), diff --git a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg.dart b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg.dart index 4f2fe6a..531ad67 100644 --- a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg.dart +++ b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg.dart @@ -3,9 +3,12 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.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_sdk/models/v2_tim_message_search_result_item.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message_search_result_item.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message_search_result_item.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_statelesswidget.dart'; import 'package:tencent_cloud_chat_uikit/data_services/conversation/conversation_services.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_search_view_model.dart'; @@ -45,19 +48,17 @@ class TIMUIKitSearchMsg extends TIMUIKitStatelessWidget { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { - List _conversationList = - Provider.of(context).conversationList; + List _conversationList = Provider.of(context).conversationList; if (msgList.isNotEmpty) { return TIMUIKitSearchFolder(folderName: TIM_t("聊天记录"), children: [ ...msgList.map((conv) { V2TimConversation? conversation; - final index = _conversationList.indexWhere( - (item) => item!.conversationID == conv?.conversationID); - if(index > -1){ + final index = _conversationList.indexWhere((item) => item!.conversationID == conv?.conversationID); + if (index > -1) { conversation = _conversationList[index]!; } - if(conversation == null){ + if (conversation == null) { return Container(); } final option1 = conv?.messageCount; @@ -68,8 +69,7 @@ class TIMUIKitSearchMsg extends TIMUIKitStatelessWidget { faceUrl: conversation.faceUrl ?? "", showName: conversation.showName ?? "", lineOne: conversation.showName ?? "", - lineTwo: TIM_t_para("{{option1}}条相关聊天记录", "$option1条相关聊天记录")( - option1: option1), + lineTwo: TIM_t_para("{{option1}}条相关聊天记录", "$option1条相关聊天记录")(option1: option1), ); }).toList(), _renderShowALl(totalMsgCount > msgList.length) diff --git a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg_detail.dart b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg_detail.dart index b0cc7dd..49fb5e3 100644 --- a/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg_detail.dart +++ b/lib/ui/views/TIMUIKitSearch/tim_uikit_search_msg_detail.dart @@ -4,8 +4,10 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.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_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/platform.dart'; @@ -48,8 +50,7 @@ class TIMUIKitSearchMsgDetail extends StatefulWidget { State createState() => TIMUIKitSearchMsgDetailState(); } -class TIMUIKitSearchMsgDetailState - extends TIMUIKitState { +class TIMUIKitSearchMsgDetailState extends TIMUIKitState { final model = serviceLocator(); String keywordState = ""; int currentPage = 0; @@ -89,11 +90,8 @@ class TIMUIKitSearchMsgDetailState final isAdminRevoke = revokeStatus.$2; if (isRevokedMessage) { final isSelf = message.isSelf ?? true; - final option2 = isAdminRevoke - ? TIM_t("管理员") - : (isSelf ? TIM_t("您") : message.nickName ?? message.sender); - return TIM_t_para("{{option2}}撤回了一条消息", "$option2撤回了一条消息")( - option2: option2); + final option2 = isAdminRevoke ? TIM_t("管理员") : (isSelf ? TIM_t("您") : message.nickName ?? message.sender); + return TIM_t_para("{{option2}}撤回了一条消息", "$option2撤回了一条消息")(option2: option2); } switch (msgType) { case MessageElemType.V2TIM_ELEM_TYPE_CUSTOM: @@ -106,8 +104,7 @@ class TIMUIKitSearchMsgDetailState return TIM_t("[表情]"); case MessageElemType.V2TIM_ELEM_TYPE_FILE: final option1 = message.fileElem!.fileName; - return TIM_t_para("[文件] {{option1}}", "[文件] $option1")( - option1: option1); + return TIM_t_para("[文件] {{option1}}", "[文件] $option1")(option1: option1); case MessageElemType.V2TIM_ELEM_TYPE_IMAGE: return TIM_t("[图片]"); case MessageElemType.V2TIM_ELEM_TYPE_VIDEO: @@ -121,8 +118,7 @@ class TIMUIKitSearchMsgDetailState } } - List _renderListMessage( - List msgList, BuildContext context, bool isDesktopScreen) { + List _renderListMessage(List msgList, BuildContext context, bool isDesktopScreen) { List listWidget = []; listWidget = msgList.map((message) { @@ -138,9 +134,8 @@ class TIMUIKitSearchMsgDetailState TencentUtils.checkString(message.userID) ?? message.sender ?? "", - lineOneRight: (isDesktopScreen && message.timestamp != null) - ? TimeAgo().getTimeForMessage(message.timestamp!) - : null, + lineOneRight: + (isDesktopScreen && message.timestamp != null) ? TimeAgo().getTimeForMessage(message.timestamp!) : null, lineTwo: _getMsgElem(message), onClick: () { focusNode.unfocus(); @@ -159,8 +154,7 @@ class TIMUIKitSearchMsgDetailState keywordState = keyword!; }); } - model.getMsgForConversation(keyword ?? keywordState, - widget.currentConversation.conversationID, currentPage); + model.getMsgForConversation(keyword ?? keywordState, widget.currentConversation.conversationID, currentPage); setState(() { currentPage = currentPage + 1; }); @@ -188,17 +182,12 @@ class TIMUIKitSearchMsgDetailState return TIMUIKitSearchNotSupport(); } return MultiProvider( - providers: [ - ChangeNotifierProvider.value( - value: serviceLocator()) - ], + providers: [ChangeNotifierProvider.value(value: serviceLocator())], builder: (context, w) { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; List currentMsgListForConversation = - Provider.of(context) - .currentMsgListForConversation; + Provider.of(context).currentMsgListForConversation; final currentText = _controller.text; if (currentMsgListForConversation.isEmpty && widget.initMessageList != null && @@ -207,9 +196,7 @@ class TIMUIKitSearchMsgDetailState currentMsgListForConversation = widget.initMessageList!; } - final int totalMsgInConversationCount = - Provider.of(context) - .totalMsgInConversationCount; + final int totalMsgInConversationCount = Provider.of(context).totalMsgInConversationCount; return GestureDetector( onTap: () { FocusScopeNode currentFocus = FocusScope.of(context); @@ -226,17 +213,13 @@ class TIMUIKitSearchMsgDetailState child: Row( children: [ SizedBox( - child: Avatar( - faceUrl: widget.currentConversation.faceUrl ?? "", - showName: ""), + child: Avatar(faceUrl: widget.currentConversation.faceUrl ?? "", showName: ""), width: 30, height: 30, ), const SizedBox(width: 16), Text( - widget.currentConversation.showName ?? - widget.currentConversation.userID ?? - "", + widget.currentConversation.showName ?? widget.currentConversation.userID ?? "", style: TextStyle( fontSize: 16, color: theme.darkTextColor, @@ -267,11 +250,9 @@ class TIMUIKitSearchMsgDetailState child: ListView( controller: _scrollController, children: [ - ..._renderListMessage(currentMsgListForConversation, - context, isDesktopScreen), - _renderShowALl(keywordState.isNotEmpty && - totalMsgInConversationCount > - currentMsgListForConversation.length) + ..._renderListMessage(currentMsgListForConversation, context, isDesktopScreen), + _renderShowALl( + keywordState.isNotEmpty && totalMsgInConversationCount > currentMsgListForConversation.length) ], ), )), diff --git a/lib/ui/widgets/avatar.dart b/lib/ui/widgets/avatar.dart index 255948e..2f0f7a0 100644 --- a/lib/ui/widgets/avatar.dart +++ b/lib/ui/widgets/avatar.dart @@ -1,6 +1,7 @@ import 'package:cached_network_image/cached_network_image.dart'; import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_self_info_view_model.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/common_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/image_screen.dart'; @@ -19,8 +20,7 @@ class Avatar extends TIMUIKitStatelessWidget { final V2TimUserStatus? onlineStatus; final int? type; // 1 c2c 2 group final bool isShowBigWhenClick; - final TUISelfInfoViewModel selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel selfInfoViewModel = serviceLocator(); Avatar( {Key? key, @@ -37,24 +37,18 @@ class Avatar extends TIMUIKitStatelessWidget { Widget defaultAvatar() { if (type == 1) { return Image.asset( - TencentUtils.checkString( - selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ?? + TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ?? 'images/default_c2c_head.png', fit: BoxFit.cover, package: - selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null - ? null - : 'tencent_cloud_chat_uikit'); + selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit'); } else { return Image.asset( - TencentUtils.checkString( - selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ?? + TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ?? 'images/default_group_head.png', fit: BoxFit.cover, package: - selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null - ? null - : 'tencent_cloud_chat_uikit'); + selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit'); } } @@ -82,27 +76,19 @@ class Avatar extends TIMUIKitStatelessWidget { ImageProvider defaultAvatar() { if (type == 1) { return Image.asset( - TencentUtils.checkString(selfInfoViewModel - .globalConfig?.defaultAvatarAssetPath) ?? + TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ?? 'images/default_c2c_head.png', fit: BoxFit.cover, package: - selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != - null - ? null - : 'tencent_cloud_chat_uikit') + selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit') .image; } else { return Image.asset( - TencentUtils.checkString(selfInfoViewModel - .globalConfig?.defaultAvatarAssetPath) ?? + TencentUtils.checkString(selfInfoViewModel.globalConfig?.defaultAvatarAssetPath) ?? 'images/default_group_head.png', fit: BoxFit.cover, package: - selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != - null - ? null - : 'tencent_cloud_chat_uikit') + selfInfoViewModel.globalConfig?.defaultAvatarAssetPath != null ? null : 'tencent_cloud_chat_uikit') .image; } } @@ -133,8 +119,7 @@ class Avatar extends TIMUIKitStatelessWidget { Navigator.of(context).push( PageRouteBuilder( opaque: false, // set to false - pageBuilder: (_, __, ___) => ImageScreen( - imageProvider: getImageProvider(), heroTag: faceUrl), + pageBuilder: (_, __, ___) => ImageScreen(imageProvider: getImageProvider(), heroTag: faceUrl), ), ); }, @@ -150,9 +135,8 @@ class Avatar extends TIMUIKitStatelessWidget { ), if (!isShowBigWhenClick) ClipRRect( - borderRadius: borderRadius ?? - selfInfoViewModel.globalConfig?.defaultAvatarBorderRadius ?? - BorderRadius.circular(4.8), + borderRadius: + borderRadius ?? selfInfoViewModel.globalConfig?.defaultAvatarBorderRadius ?? BorderRadius.circular(4.8), child: getImageWidget(context, theme), ), if (onlineStatus?.statusType != null && onlineStatus?.statusType != 0) diff --git a/lib/ui/widgets/contact_list.dart b/lib/ui/widgets/contact_list.dart index 631a19f..b525d6b 100644 --- a/lib/ui/widgets/contact_list.dart +++ b/lib/ui/widgets/contact_list.dart @@ -1,9 +1,12 @@ import 'package:azlistview_all_platforms/azlistview_all_platforms.dart'; import 'package:flutter/material.dart'; import 'package:lpinyin/lpinyin.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_user_status.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_friend_info.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_friend_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_user_status.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_user_status.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_friendship_view_model.dart'; @@ -19,8 +22,7 @@ class ContactList extends StatefulWidget { final List contactList; final bool isCanSelectMemberItem; final bool isCanSlidableDelete; - final Function(List selectedMember)? - onSelectedMemberItemChange; + final Function(List selectedMember)? onSelectedMemberItemChange; final Function()? handleSlidableDelte; final Color? bgColor; @@ -69,8 +71,7 @@ class ContactList extends StatefulWidget { class _ContactListState extends TIMUIKitState { List selectedMember = []; - final TUIFriendShipViewModel friendShipViewModel = - serviceLocator(); + final TUIFriendShipViewModel friendShipViewModel = serviceLocator(); _getShowName(V2TimFriendInfo item) { final friendRemark = item.friendRemark ?? ""; @@ -112,17 +113,13 @@ class _ContactListState extends TIMUIKitState { final faceUrl = item.userProfile?.faceUrl ?? ""; final V2TimUserStatus? onlineStatus = widget.isShowOnlineStatus - ? friendShipViewModel.userStatusList.firstWhere( - (element) => element.userID == item.userID, - orElse: () => V2TimUserStatus(statusType: 0)) + ? friendShipViewModel.userStatusList + .firstWhere((element) => element.userID == item.userID, orElse: () => V2TimUserStatus(statusType: 0)) : null; bool disabled = false; if (widget.groupMemberList != null && widget.groupMemberList!.isNotEmpty) { - disabled = ((widget.groupMemberList - ?.indexWhere((element) => element?.userID == item.userID)) ?? - -1) > - -1; + disabled = ((widget.groupMemberList?.indexWhere((element) => element?.userID == item.userID)) ?? -1) > -1; } final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; @@ -130,10 +127,7 @@ class _ContactListState extends TIMUIKitState { return Container( padding: const EdgeInsets.only(top: 8, left: 16, right: 12), decoration: BoxDecoration( - border: Border( - bottom: BorderSide( - color: - theme.weakDividerColor ?? CommonColor.weakDividerColor))), + border: Border(bottom: BorderSide(color: theme.weakDividerColor ?? CommonColor.weakDividerColor))), child: Row( children: [ if (widget.isCanSelectMemberItem) @@ -166,10 +160,7 @@ class _ContactListState extends TIMUIKitState { child: SizedBox( height: isDesktopScreen ? 30 : 40, width: isDesktopScreen ? 30 : 40, - child: Avatar( - onlineStatus: onlineStatus, - faceUrl: faceUrl, - showName: showName), + child: Avatar(onlineStatus: onlineStatus, faceUrl: faceUrl, showName: showName), ), ), Expanded( @@ -178,8 +169,7 @@ class _ContactListState extends TIMUIKitState { padding: const EdgeInsets.only(top: 10, bottom: 20, right: 28), child: Text( showName, - style: TextStyle( - color: Colors.black, fontSize: isDesktopScreen ? 14 : 18), + style: TextStyle(color: Colors.black, fontSize: isDesktopScreen ? 14 : 18), ), )), ], @@ -203,8 +193,7 @@ class _ContactListState extends TIMUIKitState { }, child: Container( padding: const EdgeInsets.only(top: 8, left: 16), - decoration: BoxDecoration( - border: Border(bottom: BorderSide(color: hexToColor("DBDBDB")))), + decoration: BoxDecoration(border: Border(bottom: BorderSide(color: hexToColor("DBDBDB")))), child: Row( children: [ Container( @@ -221,9 +210,7 @@ class _ContactListState extends TIMUIKitState { children: [ Text( memberInfo.name, - style: TextStyle( - color: hexToColor("111111"), - fontSize: isDesktopScreen ? 14 : 18), + style: TextStyle(color: hexToColor("111111"), fontSize: isDesktopScreen ? 14 : 18), ), Expanded(child: Container()), // if (item.id == "newContact") @@ -251,9 +238,7 @@ class _ContactListState extends TIMUIKitState { final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; if (widget.topList != null && widget.topList!.isNotEmpty) { - final topList = widget.topList! - .map((e) => ISuspensionBeanImpl(memberInfo: e, tagIndex: '@')) - .toList(); + final topList = widget.topList!.map((e) => ISuspensionBeanImpl(memberInfo: e, tagIndex: '@')).toList(); showList.insertAll(0, topList); } @@ -261,10 +246,7 @@ class _ContactListState extends TIMUIKitState { return Column( children: [ ...showList.map((e) => generateTopItem(e.memberInfo)).toList(), - Expanded( - child: widget.emptyBuilder != null - ? widget.emptyBuilder!(context) - : Container()) + Expanded(child: widget.emptyBuilder != null ? widget.emptyBuilder!(context) : Container()) ], ); } diff --git a/lib/ui/widgets/forward_message_screen.dart b/lib/ui/widgets/forward_message_screen.dart index 89cd9ba..663865b 100644 --- a/lib/ui/widgets/forward_message_screen.dart +++ b/lib/ui/widgets/forward_message_screen.dart @@ -1,7 +1,8 @@ import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/separate_models/tui_chat_separate_view_model.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_chat_global_model.dart'; @@ -22,11 +23,7 @@ class ForwardMessageScreen extends StatefulWidget { final VoidCallback? onClose; const ForwardMessageScreen( - {Key? key, - this.isMergerForward = false, - required this.conversationType, - required this.model, - this.onClose}) + {Key? key, this.isMergerForward = false, required this.conversationType, required this.model, this.onClose}) : super(key: key); @override @@ -35,17 +32,16 @@ class ForwardMessageScreen extends StatefulWidget { class _ForwardMessageScreenState extends TIMUIKitState { final TUIChatGlobalModel model = serviceLocator(); - final TUISelfInfoViewModel _selfInfoViewModel = - serviceLocator(); + final TUISelfInfoViewModel _selfInfoViewModel = serviceLocator(); List _conversationList = []; bool isMultiSelect = false; String _getMergerMessageTitle() { if (widget.conversationType == ConvType.c2c) { - final option1 = (_selfInfoViewModel.loginInfo?.nickName != null && - _selfInfoViewModel.loginInfo!.nickName!.isNotEmpty) - ? _selfInfoViewModel.loginInfo?.nickName - : _selfInfoViewModel.loginInfo?.userID; + final option1 = + (_selfInfoViewModel.loginInfo?.nickName != null && _selfInfoViewModel.loginInfo!.nickName!.isNotEmpty) + ? _selfInfoViewModel.loginInfo?.nickName + : _selfInfoViewModel.loginInfo?.userID; // Chat History for xx return TIM_t_para("{{option1}}的聊天记录", "$option1的聊天记录")(option1: option1); } else { @@ -55,9 +51,7 @@ class _ForwardMessageScreenState extends TIMUIKitState { List _getAbstractList() { return widget.model.getSelectedMessageList().map((e) { - final sender = (e.nickName != null && e.nickName!.isNotEmpty) - ? e.nickName - : e.sender; + final sender = (e.nickName != null && e.nickName!.isNotEmpty) ? e.nickName : e.sender; return "$sender: ${model.abstractMessageBuilder != null ? model.abstractMessageBuilder!(e) : MessageUtils.getAbstractMessageAsync(e, [])}"; }).toList(); } @@ -76,8 +70,7 @@ class _ForwardMessageScreenState extends TIMUIKitState { context: context, ); } else { - await widget.model - .sendForwardMessage(conversationList: _conversationList); + await widget.model.sendForwardMessage(conversationList: _conversationList); } widget.model.updateMultiSelectStatus(false); @@ -123,8 +116,7 @@ class _ForwardMessageScreenState extends TIMUIKitState { @override Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; final TUITheme theme = value.theme; if (isDesktopScreen) { isMultiSelect = true; diff --git a/lib/ui/widgets/group_member_list.dart b/lib/ui/widgets/group_member_list.dart index b71fc4d..48a9582 100644 --- a/lib/ui/widgets/group_member_list.dart +++ b/lib/ui/widgets/group_member_list.dart @@ -7,7 +7,8 @@ import 'package:lpinyin/lpinyin.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/group_member_role.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_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_uikit/base_widgets/tim_ui_kit_base.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/optimize_utils.dart'; @@ -80,7 +81,8 @@ class _GroupProfileMemberListState extends TIMUIKitState for (var i = 0; i < memberList.length; i++) { final item = memberList[i]; final showName = _getShowName(item); - if (item?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER || item?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN) { + if (item?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_OWNER || + item?.role == GroupMemberRoleType.V2TIM_GROUP_MEMBER_ROLE_ADMIN) { showList.add(ISuspensionBeanImpl(memberInfo: item, tagIndex: "@")); } else { String pinyin = PinyinHelper.getPinyinE(showName); @@ -99,7 +101,12 @@ class _GroupProfileMemberListState extends TIMUIKitState if (widget.canAtAll) { final canAtGroupType = ["Work", "Public", "Meeting"]; if (canAtGroupType.contains(widget.groupType)) { - showList.insert(0, ISuspensionBeanImpl(memberInfo: V2TimGroupMemberFullInfo(userID: GroupProfileMemberList.AT_ALL_USER_ID, nickName: TIM_t("所有人")), tagIndex: "")); + showList.insert( + 0, + ISuspensionBeanImpl( + memberInfo: + V2TimGroupMemberFullInfo(userID: GroupProfileMemberList.AT_ALL_USER_ID, nickName: TIM_t("所有人")), + tagIndex: "")); } } @@ -152,8 +159,10 @@ class _GroupProfileMemberListState extends TIMUIKitState } setState(() {}); }, - isChecked: selectedMemberList.where((element) => element.userID == memberInfo.userID).toList().isNotEmpty - ), + isChecked: selectedMemberList + .where((element) => element.userID == memberInfo.userID) + .toList() + .isNotEmpty), ), Container( width: isDesktopScreen ? 30 : 36, diff --git a/lib/ui/widgets/link_preview/common/utils.dart b/lib/ui/widgets/link_preview/common/utils.dart index fe92af7..1ded50b 100644 --- a/lib/ui/widgets/link_preview/common/utils.dart +++ b/lib/ui/widgets/link_preview/common/utils.dart @@ -2,7 +2,8 @@ import 'dart:convert'; import 'package:flutter/material.dart'; import 'package:link_preview_generator_for_us/link_preview_generator.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:tencent_cloud_chat_uikit/tencent_cloud_chat_uikit.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/link_preview/common/extensions.dart'; @@ -47,30 +48,24 @@ class LinkUtils { } /// Get the URL preview information - static Future> getURLPreview( - List urlMatches) async { + static Future> getURLPreview(List urlMatches) async { // Request for preview information for all URL links synchronously - final List urlPreview = - await Future.wait(urlMatches.map((e) async { + final List urlPreview = await Future.wait(urlMatches.map((e) async { String url = e; if (!e.contains("http")) { url = 'http://$e'; } final WebInfo info = await LinkPreviewForUs.scrapeFromURL(url); - return LocalCustomDataModel( - url: e, - title: info.title, - image: info.image, - description: info.description); + return LocalCustomDataModel(url: e, title: info.title, image: info.image, description: info.description); })); return urlPreview; } /// save the link info to local and call updating the message on UI, only works with [onUpdateMessage] - static Future saveToLocalAndUpdate(V2TimMessage message, - LocalCustomDataModel previewItem, ValueChanged onUpdateMessage) async { + static Future saveToLocalAndUpdate( + V2TimMessage message, LocalCustomDataModel previewItem, ValueChanged onUpdateMessage) async { if (message.msgID != null) { String saveInfo = LinkPreviewEntry.linkInfoToString(previewItem); final currentInfo = message.localCustomData; @@ -83,7 +78,7 @@ class LinkUtils { saveInfo = json.encode(data); } message.localCustomData = saveInfo; - if(saveInfo != currentInfo){ + if (saveInfo != currentInfo) { final result = await TencentImSDKPlugin.v2TIMManager.v2TIMMessageManager .setLocalCustomData(msgID: message.msgID!, localCustomData: saveInfo); if (result.code == 0) { diff --git a/lib/ui/widgets/link_preview/link_preview_entry.dart b/lib/ui/widgets/link_preview/link_preview_entry.dart index e4ec066..6ae3f98 100644 --- a/lib/ui/widgets/link_preview/link_preview_entry.dart +++ b/lib/ui/widgets/link_preview/link_preview_entry.dart @@ -1,5 +1,6 @@ import 'package:flutter/material.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/link_preview/common/utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/link_preview/widgets/link_preview.dart'; import 'package:tencent_cloud_chat_uikit/ui/widgets/link_preview/widgets/link_text.dart'; @@ -24,8 +25,7 @@ class LinkPreviewEntry { isUseTencentCloudChatPackageOldKeys: isUseTencentCloudChatPackageOldKeys, customEmojiStickerList: customEmojiStickerList, isEnableTextSelection: isEnableTextSelection, - messageText: addSpaceAfterLeftBracket( - addSpaceBeforeHttp(replaceSingleNewlineWithTwo(messageText))), + messageText: addSpaceAfterLeftBracket(addSpaceBeforeHttp(replaceSingleNewlineWithTwo(messageText))), style: style, onLinkTap: onLinkTap) : LinkText( @@ -67,8 +67,7 @@ class LinkPreviewEntry { /// get the [LinkPreviewContent] with preview widget and website information for the first link. /// If you provide `onUpdateMessage(String linkInfoJson)`, it can save the link info to local custom data than call updating the message on UI automatically. static Future getFirstLinkPreviewContent( - {required V2TimMessage message, - ValueChanged? onUpdateMessage}) async { + {required V2TimMessage message, ValueChanged? onUpdateMessage}) async { final String? messageText = message.textElem?.text; if (messageText == null) { return null; @@ -79,8 +78,7 @@ class LinkPreviewEntry { return null; } - final List previewItemList = - await LinkUtils.getURLPreview([urlMatches[0]]); + final List previewItemList = await LinkUtils.getURLPreview([urlMatches[0]]); if (previewItemList.isNotEmpty) { final LocalCustomDataModel previewItem = previewItemList.first!; if (onUpdateMessage != null) { @@ -96,8 +94,7 @@ class LinkPreviewEntry { } /// get the [LinkPreviewContent] with preview widget and website information for all the links - static Future?> getAllLinkPreviewContent( - V2TimMessage message) async { + static Future?> getAllLinkPreviewContent(V2TimMessage message) async { final String? messageText = message.textElem?.text; if (messageText == null) { return null; @@ -108,8 +105,7 @@ class LinkPreviewEntry { return []; } - final List previewItemList = - await LinkUtils.getURLPreview([urlMatches[0]]); + final List previewItemList = await LinkUtils.getURLPreview([urlMatches[0]]); if (previewItemList.isNotEmpty) { final List resultList = previewItemList .map((e) => LinkPreviewContent( diff --git a/lib/ui/widgets/merger_message_screen.dart b/lib/ui/widgets/merger_message_screen.dart index f06915f..efd760c 100644 --- a/lib/ui/widgets/merger_message_screen.dart +++ b/lib/ui/widgets/merger_message_screen.dart @@ -5,7 +5,8 @@ import 'package:loading_animation_widget/loading_animation_widget.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/common_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; @@ -26,11 +27,7 @@ class MergerMessageScreen extends StatefulWidget { final String msgID; final MessageItemBuilder? messageItemBuilder; - const MergerMessageScreen( - {Key? key, - required this.model, - required this.msgID, - this.messageItemBuilder}) + const MergerMessageScreen({Key? key, required this.model, required this.msgID, this.messageItemBuilder}) : super(key: key); @override @@ -49,22 +46,18 @@ class MergerMessageScreenState extends TIMUIKitState { } void initMessageList() async { - final mergerMessageList = - await _messageService.downloadMergerMessage(msgID: widget.msgID); + final mergerMessageList = await _messageService.downloadMergerMessage(msgID: widget.msgID); setState(() { messageList = mergerMessageList ?? []; }); } bool isReplyMessage(V2TimMessage message) { - final hasCustomData = - message.cloudCustomData != null && message.cloudCustomData != ""; + final hasCustomData = message.cloudCustomData != null && message.cloudCustomData != ""; if (hasCustomData) { try { - final CloudCustomData messageCloudCustomData = CloudCustomData.fromJson(json.decode( - TencentUtils.checkString(message.cloudCustomData) != null - ? message.cloudCustomData! - : "{}")); + final CloudCustomData messageCloudCustomData = CloudCustomData.fromJson( + json.decode(TencentUtils.checkString(message.cloudCustomData) != null ? message.cloudCustomData! : "{}")); if (messageCloudCustomData.messageReply != null) { MessageRepliedData.fromJson(messageCloudCustomData.messageReply!); return true; @@ -191,10 +184,7 @@ class MergerMessageScreenState extends TIMUIKitState { () {}, )!; } - return TIMUIKitVideoElem(message, - chatModel: widget.model, - isFrom: "merger", - isShowMessageReaction: false); + return TIMUIKitVideoElem(message, chatModel: widget.model, isFrom: "merger", isShowMessageReaction: false); case MessageElemType.V2TIM_ELEM_TYPE_LOCATION: if (widget.messageItemBuilder?.locationMessageItemBuilder != null) { return widget.messageItemBuilder!.locationMessageItemBuilder!( @@ -242,19 +232,20 @@ class MergerMessageScreenState extends TIMUIKitState { crossAxisAlignment: CrossAxisAlignment.start, mainAxisAlignment: isSelf ? MainAxisAlignment.end : MainAxisAlignment.start, children: [ - if(!isSelf) SizedBox( - width: 40, - height: 40, - child: Avatar(faceUrl: faceUrl, showName: showName), - ), - if(!isSelf) const SizedBox( - width: 12, - ), + if (!isSelf) + SizedBox( + width: 40, + height: 40, + child: Avatar(faceUrl: faceUrl, showName: showName), + ), + if (!isSelf) + const SizedBox( + width: 12, + ), Column( crossAxisAlignment: isSelf ? CrossAxisAlignment.end : CrossAxisAlignment.start, children: [ - Text(showName, - style: TextStyle(fontSize: 12, color: theme.weakTextColor)), + Text(showName, style: TextStyle(fontSize: 12, color: theme.weakTextColor)), const SizedBox( height: 4, ), @@ -264,14 +255,16 @@ class MergerMessageScreenState extends TIMUIKitState { ) ], ), - if(isSelf) const SizedBox( - width: 12, - ), - if(isSelf) SizedBox( - width: 40, - height: 40, - child: Avatar(faceUrl: faceUrl, showName: showName), - ), + if (isSelf) + const SizedBox( + width: 12, + ), + if (isSelf) + SizedBox( + width: 40, + height: 40, + child: Avatar(faceUrl: faceUrl, showName: showName), + ), ], ), ); @@ -281,8 +274,7 @@ class MergerMessageScreenState extends TIMUIKitState { Widget tuiBuild(BuildContext context, TUIKitBuildValue value) { final TUITheme theme = value.theme; - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; Widget messageListPage() { return messageList.isEmpty @@ -330,8 +322,7 @@ class MergerMessageScreenState extends TIMUIKitState { style: TextStyle(color: theme.appbarTextColor, fontSize: 17), ), shadowColor: theme.weakDividerColor, - backgroundColor: theme.appbarBgColor ?? - theme.primaryColor, + backgroundColor: theme.appbarBgColor ?? theme.primaryColor, iconTheme: IconThemeData( color: theme.appbarTextColor, )), diff --git a/lib/ui/widgets/message_read_receipt.dart b/lib/ui/widgets/message_read_receipt.dart index e3b7744..c1e747c 100644 --- a/lib/ui/widgets/message_read_receipt.dart +++ b/lib/ui/widgets/message_read_receipt.dart @@ -6,8 +6,10 @@ import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/get_group_message_read_member_list_filter.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_elem_type.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.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_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/ui/utils/screen_utils.dart'; import 'package:tencent_cloud_chat_uikit/ui/views/TIMUIKitChat/TIMUIKitTextField/special_text/DefaultSpecialTextSpanBuilder.dart'; diff --git a/lib/ui/widgets/recent_conversation_list.dart b/lib/ui/widgets/recent_conversation_list.dart index 366e656..8c39c88 100644 --- a/lib/ui/widgets/recent_conversation_list.dart +++ b/lib/ui/widgets/recent_conversation_list.dart @@ -1,7 +1,8 @@ import 'package:flutter/material.dart'; import 'package:provider/provider.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_conversation.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.dart'; import 'package:tencent_cloud_chat_uikit/business_logic/view_models/tui_conversation_view_model.dart'; import 'package:tencent_cloud_chat_uikit/data_services/services_locatar.dart'; @@ -27,14 +28,11 @@ class RecentForwardList extends StatefulWidget { } class _RecentForwardListState extends TIMUIKitState { - final TUIConversationViewModel _conversationViewModel = - serviceLocator(); + final TUIConversationViewModel _conversationViewModel = serviceLocator(); final List _selectedConversation = []; - List> _buildMemberList( - List conversationList) { - final List> showList = - List.empty(growable: true); + List> _buildMemberList(List conversationList) { + final List> showList = List.empty(growable: true); for (var i = 0; i < conversationList.length; i++) { final item = conversationList[i]; showList.add(ISuspensionBeanImpl(memberInfo: item, tagIndex: "#")); @@ -43,8 +41,7 @@ class _RecentForwardListState extends TIMUIKitState { } Widget _buildItem(V2TimConversation conversation) { - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; final faceUrl = conversation.faceUrl ?? ""; final showName = conversation.showName ?? ""; @@ -108,14 +105,13 @@ class _RecentForwardListState extends TIMUIKitState { child: Container( alignment: Alignment.centerLeft, padding: EdgeInsets.only(top: 10, bottom: isDesktopScreen ? 12 : 19), - decoration: isDesktopScreen ? null : const BoxDecoration( - border: - Border(bottom: BorderSide(color: Color(0xFFDBDBDB)))), + decoration: isDesktopScreen + ? null + : const BoxDecoration(border: Border(bottom: BorderSide(color: Color(0xFFDBDBDB)))), child: Text( showName, // textAlign: TextAlign.center, - style: - TextStyle(color: const Color(0xFF111111), fontSize: isDesktopScreen ? 16 : 18), + style: TextStyle(color: const Color(0xFF111111), fontSize: isDesktopScreen ? 16 : 18), ), )) ], @@ -126,7 +122,6 @@ class _RecentForwardListState extends TIMUIKitState { ); } - @override void dispose() { super.dispose(); @@ -144,31 +139,31 @@ class _RecentForwardListState extends TIMUIKitState { ChangeNotifierProvider.value(value: _conversationViewModel), ], builder: (context, w) { - final recentConvList = - serviceLocator().conversationList; + final recentConvList = serviceLocator().conversationList; final showList = _buildMemberList(recentConvList); - final isDesktopScreen = - TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; + final isDesktopScreen = TUIKitScreenUtils.getFormFactor(context) == DeviceType.Desktop; return AZListViewContainer( memberList: showList, isShowIndexBar: false, susItemBuilder: (context, index) { - return isDesktopScreen ? Container() : Container( - height: 40, - width: MediaQuery.of(context).size.width, - padding: const EdgeInsets.only(left: 16.0), - color: theme.weakDividerColor, - alignment: Alignment.centerLeft, - child: Text( - TIM_t("最近联系人"), - softWrap: true, - style: TextStyle( - fontSize: 14.0, - color: theme.weakTextColor, - ), - ), - ); + return isDesktopScreen + ? Container() + : Container( + height: 40, + width: MediaQuery.of(context).size.width, + padding: const EdgeInsets.only(left: 16.0), + color: theme.weakDividerColor, + alignment: Alignment.centerLeft, + child: Text( + TIM_t("最近联系人"), + softWrap: true, + style: TextStyle( + fontSize: 14.0, + color: theme.weakTextColor, + ), + ), + ); }, itemBuilder: (context, index) { final conversation = showList[index].memberInfo; diff --git a/lib/ui/widgets/transimit_group_owner_select.dart b/lib/ui/widgets/transimit_group_owner_select.dart index 125efa3..b6bacaa 100644 --- a/lib/ui/widgets/transimit_group_owner_select.dart +++ b/lib/ui/widgets/transimit_group_owner_select.dart @@ -1,7 +1,9 @@ import 'package:flutter/material.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_full_info.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_group_member_search_param.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_search_param.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_group_member_search_param.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_ui_kit_state.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'; @@ -37,7 +39,6 @@ class _SelectNewGroupOwner extends TIMUIKitState { List? searchMemberList; String? searchText; - @override void dispose() { super.dispose(); @@ -49,13 +50,9 @@ class _SelectNewGroupOwner extends TIMUIKitState { handleSearchGroupMembers(String searchText, context) async { searchText = searchText; - List currentGroupMember = widget - .model.groupMemberList - .where( - (element) => element?.userID != _coreServicesImpl.loginInfo.userID) - .toList(); - final res = - await widget.model.searchGroupMember(V2TimGroupMemberSearchParam( + List currentGroupMember = + widget.model.groupMemberList.where((element) => element?.userID != _coreServicesImpl.loginInfo.userID).toList(); + final res = await widget.model.searchGroupMember(V2TimGroupMemberSearchParam( keywordList: [searchText], groupIDList: [widget.model.groupInfo!.groupID], isSearchMemberNameCard: true, @@ -80,8 +77,7 @@ class _SelectNewGroupOwner extends TIMUIKitState { currentGroupMember = []; } setState(() { - searchMemberList = - isSearchTextExist(searchText) ? currentGroupMember : null; + searchMemberList = isSearchTextExist(searchText) ? currentGroupMember : null; }); } @@ -103,8 +99,7 @@ class _SelectNewGroupOwner extends TIMUIKitState { onTextChange: (text) => handleSearchGroupMembers(text, context), ), memberList: (searchMemberList ?? widget.model.groupMemberList) - .where((element) => - element?.userID != _coreServicesImpl.loginInfo.userID) + .where((element) => element?.userID != _coreServicesImpl.loginInfo.userID) .toList(), canSlideDelete: false, canSelectMember: true, @@ -125,8 +120,7 @@ class _SelectNewGroupOwner extends TIMUIKitState { iconTheme: IconThemeData( color: theme.appbarTextColor, ), - backgroundColor: theme.appbarBgColor ?? - theme.primaryColor, + backgroundColor: theme.appbarBgColor ?? theme.primaryColor, leading: TextButton( onPressed: () { Navigator.pop(context); diff --git a/lib/ui/widgets/video_screen.dart b/lib/ui/widgets/video_screen.dart index 7385863..75e9891 100644 --- a/lib/ui/widgets/video_screen.dart +++ b/lib/ui/widgets/video_screen.dart @@ -10,8 +10,10 @@ import 'package:flutter/services.dart'; import 'package:image_gallery_saver_plus/image_gallery_saver_plus.dart'; import 'package:tencent_chat_i18n_tool/tencent_chat_i18n_tool.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart'; -import 'package:tencent_cloud_chat_sdk/models/v2_tim_video_elem.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_message.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_message.dart'; +import 'package:tencent_cloud_chat_sdk/models/v2_tim_video_elem.dart' + if (dart.library.html) 'package:tencent_cloud_chat_sdk/web/compatible_models/v2_tim_video_elem.dart'; import 'package:tencent_cloud_chat_uikit/base_widgets/tim_callback.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_state.dart'; diff --git a/pubspec.yaml b/pubspec.yaml index 201fc8a..d0ae1d2 100644 --- a/pubspec.yaml +++ b/pubspec.yaml @@ -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: 4.0.6 +version: 4.0.8 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 @@ -88,7 +88,7 @@ dependency_overrides: # path: ../../../tencent_chat_i18n_tool # tencent_cloud_chat_sdk: -# path: ../../../tencent_cloud_chat_sdk +# path: ../../../../imsdk/imsdk/src/platform/flutter/tencent_cloud_chat_sdk/ # For information on the generic Dart part of this file, see the # following page: https://dart.dev/tools/pub/pubspec