增加一个硬编码

This commit is contained in:
ZuoZuo 2026-04-14 14:50:12 +08:00
parent 88d9428970
commit 9cd4812987
9 changed files with 206 additions and 146 deletions

View File

@ -48,13 +48,54 @@ class SCGlobalConfig {
static num get gameAppid => AppConfig.current.gameAppid; static num get gameAppid => AppConfig.current.gameAppid;
static String get gameAppChannel => AppConfig.current.gameAppChannel; static String get gameAppChannel => AppConfig.current.gameAppChannel;
///广 ///广
static String get bigBroadcastGroup => AppConfig.current.bigBroadcastGroup; static String get bigBroadcastGroup => AppConfig.current.bigBroadcastGroup;
static String get imAdmin => AppConfig.current.imAdmin; static String get imAdmin => AppConfig.current.imAdmin;
static const Set<String> _extraSystemUserIds = {"yuminotice"};
///
static String get wealthRankUrl => AppConfig.current.wealthRankUrl; static String _normalizeConversationUserId(String conversationId) {
return conversationId.startsWith("c2c_")
? conversationId.replaceFirst("c2c_", "")
: conversationId;
}
static Set<String> get systemUserIds {
return {
"administrator",
_normalizeConversationUserId(imAdmin),
..._extraSystemUserIds,
}.where((element) => element.isNotEmpty).toSet();
}
static Set<String> get systemConversationIds {
return {
"administrator",
...systemUserIds
.where((element) => element != "administrator")
.map((element) => "c2c_$element"),
};
}
static String get primarySystemUserId => _normalizeConversationUserId(imAdmin);
static String get primarySystemConversationId => "c2c_$primarySystemUserId";
static bool isSystemConversationId(String? conversationId) {
if (conversationId == null || conversationId.isEmpty) {
return false;
}
return systemConversationIds.contains(conversationId);
}
static bool isSystemUserId(String? userId) {
if (userId == null || userId.isEmpty) {
return false;
}
return systemUserIds.contains(userId);
}
///
static String get wealthRankUrl => AppConfig.current.wealthRankUrl;
/// ///
static String get charmRankUrl => AppConfig.current.charmRankUrl; static String get charmRankUrl => AppConfig.current.charmRankUrl;

View File

@ -4,20 +4,17 @@ import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:yumi/app_localizations.dart'; import 'package:yumi/app_localizations.dart';
import 'package:yumi/ui_kit/components/sc_debounce_widget.dart'; import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart'; import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/services/audio/rtm_manager.dart'; import 'package:yumi/services/audio/rtm_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tencent_cloud_chat_sdk/enum/conversation_type.dart'; import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/app/config/business_logic_strategy.dart'; import 'package:yumi/app/config/business_logic_strategy.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart'; import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/shared/data_sources/sources/local/data_persistence.dart'; import 'package:yumi/shared/data_sources/sources/local/data_persistence.dart';
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart'; import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
import 'package:yumi/ui_kit/theme/socialchat_theme.dart'; import 'package:yumi/ui_kit/theme/socialchat_theme.dart';
import 'package:yumi/ui_kit/widgets/msg/message_conversation_list_page.dart'; import 'package:yumi/ui_kit/widgets/msg/message_conversation_list_page.dart';
import 'package:yumi/modules/chat/message/sc_message_friends_page.dart';
import '../../index/main_route.dart'; import '../../index/main_route.dart';
import '../chat_route.dart'; import '../chat_route.dart';
@ -326,16 +323,12 @@ class _MessagePageState extends State<SCMessagePage> {
), ),
), ),
], ],
), ),
onTap: () async { onTap: () async {
var conversation = V2TimConversation( var conversation = provider.getPreferredSystemConversation();
type: ConversationType.V2TIM_C2C, provider.updateSystemCount(0);
userID: SCGlobalConfig.imAdmin.replaceFirst('c2c_', ''), var bool = await provider.startConversation(conversation);
conversationID: SCGlobalConfig.imAdmin, if (!bool) return;
);
provider.updateSystemCount(0);
var bool = await provider.startConversation(conversation);
if (!bool) return;
var json = jsonEncode(conversation.toJson()); var json = jsonEncode(conversation.toJson());
SCNavigatorUtils.push( SCNavigatorUtils.push(
context, context,

View File

@ -258,9 +258,10 @@ class _SCMessageChatPageState extends State<SCMessageChatPage> {
top: false, top: false,
child: Column( child: Column(
children: <Widget>[ children: <Widget>[
if (currentConversation?.conversationID != if (!SCGlobalConfig.isSystemConversationId(
"administrator") currentConversation?.conversationID,
_input(), ))
_input(),
_tools(provider), _tools(provider),
_emoji(), _emoji(),
// _fahongbao(), // _fahongbao(),
@ -279,12 +280,16 @@ class _SCMessageChatPageState extends State<SCMessageChatPage> {
); );
} }
void loadFriend() { void loadFriend() {
SCLoadingManager.show(); if (SCGlobalConfig.isSystemConversationId(currentConversation?.conversationID) ||
Future.wait([ SCGlobalConfig.isSystemUserId(currentConversation?.userID)) {
SCAccountRepository().loadUserInfo("${currentConversation?.userID}"), return;
SCAccountRepository().friendRelationCheck( }
"${currentConversation?.userID}", SCLoadingManager.show();
Future.wait([
SCAccountRepository().loadUserInfo("${currentConversation?.userID}"),
SCAccountRepository().friendRelationCheck(
"${currentConversation?.userID}",
), ),
]) ])
.then((result) { .then((result) {

View File

@ -16,11 +16,12 @@ import 'package:yumi/shared/data_sources/sources/local/floating_screen_manager.d
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart'; import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
import 'package:yumi/services/audio/rtc_manager.dart'; import 'package:yumi/services/audio/rtc_manager.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import 'package:tencent_cloud_chat_sdk/enum/V2TimAdvancedMsgListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimAdvancedMsgListener.dart';
import 'package:tencent_cloud_chat_sdk/enum/V2TimConversationListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimConversationListener.dart';
import 'package:tencent_cloud_chat_sdk/enum/V2TimGroupListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimGroupListener.dart';
import 'package:tencent_cloud_chat_sdk/enum/V2TimSDKListener.dart'; import 'package:tencent_cloud_chat_sdk/enum/V2TimSDKListener.dart';
import 'package:tencent_cloud_chat_sdk/enum/group_type.dart'; import 'package:tencent_cloud_chat_sdk/enum/conversation_type.dart';
import 'package:tencent_cloud_chat_sdk/enum/group_type.dart';
import 'package:tencent_cloud_chat_sdk/enum/log_level_enum.dart'; import 'package:tencent_cloud_chat_sdk/enum/log_level_enum.dart';
import 'package:tencent_cloud_chat_sdk/enum/message_status.dart'; import 'package:tencent_cloud_chat_sdk/enum/message_status.dart';
import 'package:tencent_cloud_chat_sdk/manager/v2_tim_group_manager.dart'; import 'package:tencent_cloud_chat_sdk/manager/v2_tim_group_manager.dart';
@ -49,8 +50,7 @@ import 'package:yumi/shared/business_logic/models/res/sc_broad_cast_luck_gift_pu
import 'package:yumi/shared/business_logic/models/res/broad_cast_mic_change_push.dart'; import 'package:yumi/shared/business_logic/models/res/broad_cast_mic_change_push.dart';
import 'package:yumi/shared/business_logic/models/res/gift_res.dart'; import 'package:yumi/shared/business_logic/models/res/gift_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_public_message_page_res.dart'; import 'package:yumi/shared/business_logic/models/res/sc_public_message_page_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_room_rocket_status_res.dart'; import 'package:yumi/shared/business_logic/models/res/sc_room_theme_list_res.dart';
import 'package:yumi/shared/business_logic/models/res/sc_room_theme_list_res.dart';
import 'package:yumi/ui_kit/widgets/room/invite/invite_room_dialog.dart'; import 'package:yumi/ui_kit/widgets/room/invite/invite_room_dialog.dart';
import 'package:yumi/ui_kit/widgets/room/room_msg_item.dart'; import 'package:yumi/ui_kit/widgets/room/room_msg_item.dart';
import 'package:yumi/shared/business_logic/models/res/login_res.dart'; import 'package:yumi/shared/business_logic/models/res/login_res.dart';
@ -113,18 +113,48 @@ class RealTimeMessagingManager extends ChangeNotifier {
Debouncer debouncer = Debouncer(); Debouncer debouncer = Debouncer();
List<V2TimConversation> conversationList = []; List<V2TimConversation> conversationList = [];
/// ///
SocialChatUserProfile? customerInfo; SocialChatUserProfile? customerInfo;
void getConversationList() { int _systemUnreadCount() {
List<V2TimConversation> list = conversationMap?.values?.toList() ?? []; int count = 0;
list.removeWhere((element) { for (final conversationId in SCGlobalConfig.systemConversationIds) {
if (element.conversationID == SCGlobalConfig.imAdmin) { count += conversationMap[conversationId]?.unreadCount ?? 0;
return true; }
} return count;
if (element.conversationID == "c2c_${customerInfo?.id}") { }
return true;
} V2TimConversation getPreferredSystemConversation() {
final systemConversations =
conversationMap.values
.where(
(element) =>
SCGlobalConfig.isSystemConversationId(element.conversationID),
)
.toList()
..sort((e1, e2) {
final time1 = e1.lastMessage?.timestamp ?? 0;
final time2 = e2.lastMessage?.timestamp ?? 0;
return time2.compareTo(time1);
});
if (systemConversations.isNotEmpty) {
return systemConversations.first;
}
return V2TimConversation(
type: ConversationType.V2TIM_C2C,
userID: SCGlobalConfig.primarySystemUserId,
conversationID: SCGlobalConfig.primarySystemConversationId,
);
}
void getConversationList() {
List<V2TimConversation> list = conversationMap.values.toList();
list.removeWhere((element) {
if (element.conversationID == "c2c_${customerInfo?.id}") {
return true;
}
if (element.conversationID == "c2c_atyou-newsletter") { if (element.conversationID == "c2c_atyou-newsletter") {
/// ///
clearC2CHistoryMessage(element.conversationID, false); clearC2CHistoryMessage(element.conversationID, false);
@ -135,16 +165,15 @@ class RealTimeMessagingManager extends ChangeNotifier {
} }
return false; return false;
}); });
list?.sort((e1, e2) { list.sort((e1, e2) {
int time1 = e1.lastMessage?.timestamp ?? 0; int time1 = e1.lastMessage?.timestamp ?? 0;
int time2 = e2.lastMessage?.timestamp ?? 0; int time2 = e2.lastMessage?.timestamp ?? 0;
return time2.compareTo(time1); return time2.compareTo(time1);
}); });
conversationList = list; conversationList = list;
systemUnReadCount = systemUnReadCount = _systemUnreadCount();
conversationMap[SCGlobalConfig.imAdmin]?.unreadCount ?? 0; customerUnReadCount =
customerUnReadCount = conversationMap["c2c_${customerInfo?.id}"]?.unreadCount ?? 0;
conversationMap["c2c_${customerInfo?.id}"]?.unreadCount ?? 0;
notifyListeners(); notifyListeners();
} }
@ -205,12 +234,11 @@ class RealTimeMessagingManager extends ChangeNotifier {
// _onRefreshConversation(conversationList); // _onRefreshConversation(conversationList);
initConversation(); initConversation();
}, },
onTotalUnreadMessageCountChanged: (int totalUnreadCount) { onTotalUnreadMessageCountChanged: (int totalUnreadCount) {
messageUnReadCount = totalUnreadCount; messageUnReadCount = totalUnreadCount;
systemUnReadCount = systemUnReadCount = _systemUnreadCount();
conversationMap[SCGlobalConfig.imAdmin]?.unreadCount ?? 0; customerUnReadCount =
customerUnReadCount = conversationMap["c2c_${customerInfo?.id}"]?.unreadCount ?? 0;
conversationMap["c2c_${customerInfo?.id}"]?.unreadCount ?? 0;
allUnReadCount = allUnReadCount =
messageUnReadCount + messageUnReadCount +
notifcationUnReadCount + notifcationUnReadCount +
@ -450,21 +478,16 @@ class RealTimeMessagingManager extends ChangeNotifier {
} }
} }
} }
if (message?.userID == customerInfo?.id) { if (message?.userID == customerInfo?.id) {
if (onNewMessageCurrentConversationListener == null) {
conversationMap["c2c_${customerInfo?.id}"]?.unreadCount =
(conversationMap["c2c_${customerInfo?.id}"]?.unreadCount ?? 0) + 1;
}
}
if (message?.userID == SCGlobalConfig.imAdmin.replaceFirst('c2c_', '')) {
if (onNewMessageCurrentConversationListener == null) { if (onNewMessageCurrentConversationListener == null) {
conversationMap[SCGlobalConfig.imAdmin]?.unreadCount = conversationMap["c2c_${customerInfo?.id}"]?.unreadCount =
(conversationMap[SCGlobalConfig.imAdmin]?.unreadCount ?? 0) + 1; (conversationMap["c2c_${customerInfo?.id}"]?.unreadCount ?? 0) + 1;
} }
} }
notifyListeners(); systemUnReadCount = _systemUnreadCount();
onNewMessageCurrentConversationListener?.call(message, msgId: msgId); notifyListeners();
} onNewMessageCurrentConversationListener?.call(message, msgId: msgId);
}
void _onRefreshConversation(List<V2TimConversation> conversations) { void _onRefreshConversation(List<V2TimConversation> conversations) {
for (V2TimConversation conversation in conversations) { for (V2TimConversation conversation in conversations) {
@ -1366,11 +1389,13 @@ class RealTimeMessagingManager extends ChangeNotifier {
notifyListeners(); notifyListeners();
} }
void updateSystemCount(int count) { void updateSystemCount(int count) {
conversationMap[SCGlobalConfig.imAdmin]?.unreadCount = 0; for (final conversationId in SCGlobalConfig.systemConversationIds) {
systemUnReadCount = 0; conversationMap[conversationId]?.unreadCount = 0;
notifyListeners(); }
} systemUnReadCount = 0;
notifyListeners();
}
void updateCustomerCount(int count) { void updateCustomerCount(int count) {
conversationMap["c2c_${customerInfo?.id}"]?.unreadCount = 0; conversationMap["c2c_${customerInfo?.id}"]?.unreadCount = 0;

View File

@ -1,24 +1,19 @@
import 'dart:convert'; import 'dart:convert';
import 'dart:ui' as ui; import 'dart:ui' as ui;
import 'package:flutter/cupertino.dart'; import 'package:flutter/material.dart';
import 'package:flutter/material.dart'; import 'package:flutter_screenutil/flutter_screenutil.dart';
import 'package:flutter_debouncer/flutter_debouncer.dart'; import 'package:yumi/shared/data_sources/sources/local/data_persistence.dart';
import 'package:flutter_screenutil/flutter_screenutil.dart'; import 'package:yumi/shared/data_sources/sources/local/user_manager.dart';
import 'package:yumi/shared/data_sources/sources/local/data_persistence.dart'; import 'package:provider/provider.dart';
import 'package:yumi/shared/data_sources/sources/local/user_manager.dart'; import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart';
import 'package:provider/provider.dart'; import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart';
import 'package:tencent_cloud_chat_sdk/enum/conversation_type.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_conversation.dart'; import 'package:yumi/app_localizations.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_value_callback.dart'; import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
import 'package:tencent_cloud_chat_sdk/tencent_im_sdk_plugin.dart'; import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/app_localizations.dart'; import 'package:yumi/services/audio/rtm_manager.dart';
import 'package:yumi/ui_kit/components/sc_debounce_widget.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/services/audio/rtm_manager.dart';
import 'package:yumi/ui_kit/widgets/msg/message_conversation_list_page.dart'; import 'package:yumi/ui_kit/widgets/msg/message_conversation_list_page.dart';
import '../../../modules/chat/chat_route.dart'; import '../../../modules/chat/chat_route.dart';
@ -347,16 +342,12 @@ class _BottomMessageConversationListPageState
fontWeight: FontWeight.bold, fontWeight: FontWeight.bold,
), ),
], ],
), ),
onTap: () async { onTap: () async {
var conversation = V2TimConversation( var conversation = provider.getPreferredSystemConversation();
type: ConversationType.V2TIM_C2C, provider.updateSystemCount(0);
userID: SCGlobalConfig.imAdmin.replaceFirst('c2c_', ''), var bool = await provider.startConversation(conversation);
conversationID: SCGlobalConfig.imAdmin, if (!bool) return;
);
provider.updateSystemCount(0);
var bool = await provider.startConversation(conversation);
if (!bool) return;
var json = jsonEncode(conversation.toJson()); var json = jsonEncode(conversation.toJson());
SCNavigatorUtils.push( SCNavigatorUtils.push(
context, context,

View File

@ -13,10 +13,11 @@ 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_custom_elem.dart';
import 'package:tencent_cloud_chat_sdk/models/v2_tim_text_elem.dart'; import 'package:tencent_cloud_chat_sdk/models/v2_tim_text_elem.dart';
import 'package:yumi/app_localizations.dart'; import 'package:yumi/app_localizations.dart';
import 'package:yumi/ui_kit/components/dialog/dialog_base.dart'; import 'package:yumi/ui_kit/components/dialog/dialog_base.dart';
import 'package:yumi/ui_kit/components/sc_compontent.dart'; import 'package:yumi/ui_kit/components/sc_compontent.dart';
import 'package:yumi/ui_kit/components/text/sc_text.dart'; import 'package:yumi/ui_kit/components/text/sc_text.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart'; import 'package:yumi/app/constants/sc_global_config.dart';
import 'package:yumi/app/routes/sc_fluro_navigator.dart';
import 'package:yumi/shared/tools/sc_date_utils.dart'; import 'package:yumi/shared/tools/sc_date_utils.dart';
import 'package:yumi/shared/data_sources/sources/repositories/sc_user_repository_impl.dart'; import 'package:yumi/shared/data_sources/sources/repositories/sc_user_repository_impl.dart';
import 'package:yumi/shared/business_logic/models/res/login_res.dart'; import 'package:yumi/shared/business_logic/models/res/login_res.dart';
@ -347,21 +348,25 @@ class _ConversationItemState extends State<ConversationItem> {
}*/ }*/
// print('time :${Platform.isAndroid ? (conversation.lastMsg?.timestamp ?? 0) * 1000 : conversation.lastMsg?.timestamp}'); // print('time :${Platform.isAndroid ? (conversation.lastMsg?.timestamp ?? 0) * 1000 : conversation.lastMsg?.timestamp}');
return GestureDetector( return GestureDetector(
onTap: () async { onTap: () async {
if (conversation != null) { if (conversation != null) {
conversation.unreadCount = 0; conversation.unreadCount = 0;
var bool = await Provider.of<RtmProvider>( var bool = await Provider.of<RtmProvider>(
context, context,
listen: false, listen: false,
).startConversation(conversation); ).startConversation(conversation);
if (!bool) return; if (!bool) return;
var json = jsonEncode(widget.conversation.toJson()); var json = jsonEncode(widget.conversation.toJson());
SCNavigatorUtils.push( final route =
context, SCGlobalConfig.isSystemConversationId(conversation.conversationID)
"${SCChatRouter.chat}?conversation=${Uri.encodeComponent(json)}", ? SCChatRouter.systemChat
); : SCChatRouter.chat;
} SCNavigatorUtils.push(
}, context,
"$route?conversation=${Uri.encodeComponent(json)}",
);
}
},
onLongPress: () { onLongPress: () {
showDeleteConfirm(); showDeleteConfirm();
}, },
@ -521,13 +526,13 @@ class _ConversationItemState extends State<ConversationItem> {
); );
} }
void loadUserInfo() { void loadUserInfo() {
if (conversation.conversationID != "administrator" && if (!SCGlobalConfig.isSystemConversationId(conversation.conversationID) &&
conversation.conversationID != "customer" && conversation.conversationID != "customer" &&
conversation.conversationID != "article") { conversation.conversationID != "article") {
SCAccountRepository().loadUserInfo("${conversation.userID}").then((value) { SCAccountRepository().loadUserInfo("${conversation.userID}").then((value) {
user = value; user = value;
setState(() {}); setState(() {});
}); });
} }
} }