From dc6795e00e07936d5b6b9907f021a976b510b08a Mon Sep 17 00:00:00 2001 From: roxy Date: Thu, 4 Jun 2026 09:58:47 +0800 Subject: [PATCH] =?UTF-8?q?=20iOS=E7=89=88=E6=9C=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ios/Runner.xcodeproj/project.pbxproj | 12 ++-- ios/Runner/Info.plist | 8 +-- lib/modules/gift/gift_page.dart | 72 +++++++++---------- lib/modules/room/voice_room_page.dart | 64 +++++++++-------- .../local/floating_screen_manager.dart | 2 +- 5 files changed, 83 insertions(+), 75 deletions(-) diff --git a/ios/Runner.xcodeproj/project.pbxproj b/ios/Runner.xcodeproj/project.pbxproj index 7c9385d..e43756d 100644 --- a/ios/Runner.xcodeproj/project.pbxproj +++ b/ios/Runner.xcodeproj/project.pbxproj @@ -524,7 +524,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 160; + CURRENT_PROJECT_VERSION = 100; DEVELOPMENT_TEAM = S9YG87C297; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -533,7 +533,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.6.0; + MARKETING_VERSION = 1.0.0; PRODUCT_BUNDLE_IDENTIFIER = com.org.yumiparty; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -715,7 +715,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerDebug.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 160; + CURRENT_PROJECT_VERSION = 100; DEVELOPMENT_TEAM = S9YG87C297; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -724,7 +724,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.6.0; + MARKETING_VERSION = 1.0.0; PRODUCT_BUNDLE_IDENTIFIER = com.org.yumiparty; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; @@ -744,7 +744,7 @@ CODE_SIGN_ENTITLEMENTS = Runner/RunnerRelease.entitlements; CODE_SIGN_IDENTITY = "Apple Development"; CODE_SIGN_STYLE = Automatic; - CURRENT_PROJECT_VERSION = 160; + CURRENT_PROJECT_VERSION = 100; DEVELOPMENT_TEAM = S9YG87C297; ENABLE_BITCODE = NO; INFOPLIST_FILE = Runner/Info.plist; @@ -753,7 +753,7 @@ "$(inherited)", "@executable_path/Frameworks", ); - MARKETING_VERSION = 1.6.0; + MARKETING_VERSION = 1.0.0; PRODUCT_BUNDLE_IDENTIFIER = com.org.yumiparty; PRODUCT_NAME = "$(TARGET_NAME)"; PROVISIONING_PROFILE_SPECIFIER = ""; diff --git a/ios/Runner/Info.plist b/ios/Runner/Info.plist index 7a762e6..76689b7 100644 --- a/ios/Runner/Info.plist +++ b/ios/Runner/Info.plist @@ -31,8 +31,8 @@ yumi CFBundlePackageType APPL - CFBundleShortVersionString - $(FLUTTER_BUILD_NAME) + CFBundleShortVersionString + 1.0.0 CFBundleSignature ???? CFBundleURLTypes @@ -56,8 +56,8 @@ - CFBundleVersion - $(FLUTTER_BUILD_NUMBER) + CFBundleVersion + 100 LSRequiresIPhoneOS NSCameraUsageDescription diff --git a/lib/modules/gift/gift_page.dart b/lib/modules/gift/gift_page.dart index d693ead..12efe0d 100644 --- a/lib/modules/gift/gift_page.dart +++ b/lib/modules/gift/gift_page.dart @@ -1761,6 +1761,42 @@ class _GiftPageState extends State with TickerProviderStateMixin { 'hasFullScreenEffect=$hasFullScreenEffect ' 'effectsEnabled=${SCGlobalConfig.isGiftSpecialEffects}', ); + if (gift.giftSourceUrl != null && gift.special != null) { + if (scGiftHasFullScreenEffect(gift.special)) { + if (SCGlobalConfig.allowsHighCostAnimations && + SCGlobalConfig.isGiftSpecialEffects && + (rtcProvider?.shouldShowRoomVisualEffects ?? false)) { + _giftFxLog( + 'local trigger player play ' + 'path=${gift.giftSourceUrl} ' + 'giftId=${gift.id} ' + 'giftName=${gift.giftName} ' + 'animationCount=$animationCount', + ); + SCGiftVapSvgaManager().play(gift.giftSourceUrl!); + } else { + _giftFxLog( + 'skip local play because visual effects disabled ' + 'giftId=${gift.id} ' + 'isGiftSpecialEffects=${SCGlobalConfig.isGiftSpecialEffects} ' + 'roomVisible=${rtcProvider?.shouldShowRoomVisualEffects ?? false}', + ); + } + } else { + _giftFxLog( + 'skip local play because special does not include ' + '${SCGiftType.ANIMSCION.name}/$kSCGiftAnimationSpecialAlias/${SCGiftType.GLOBAL_GIFT.name} ' + 'giftId=${gift.id} special=${gift.special}', + ); + } + } else { + _giftFxLog( + 'skip local play because giftSourceUrl or special is null ' + 'giftId=${gift.id} ' + 'giftSourceUrl=${gift.giftSourceUrl} ' + 'special=${gift.special}', + ); + } Provider.of( navigatorKey.currentState!.context, listen: false, @@ -1826,42 +1862,6 @@ class _GiftPageState extends State with TickerProviderStateMixin { ), ); } - if (gift.giftSourceUrl != null && gift.special != null) { - if (scGiftHasFullScreenEffect(gift.special)) { - if (SCGlobalConfig.allowsHighCostAnimations && - SCGlobalConfig.isGiftSpecialEffects && - (rtcProvider?.shouldShowRoomVisualEffects ?? false)) { - _giftFxLog( - 'local trigger player play ' - 'path=${gift.giftSourceUrl} ' - 'giftId=${gift.id} ' - 'giftName=${gift.giftName} ' - 'animationCount=$animationCount', - ); - SCGiftVapSvgaManager().play(gift.giftSourceUrl!); - } else { - _giftFxLog( - 'skip local play because visual effects disabled ' - 'giftId=${gift.id} ' - 'isGiftSpecialEffects=${SCGlobalConfig.isGiftSpecialEffects} ' - 'roomVisible=${rtcProvider?.shouldShowRoomVisualEffects ?? false}', - ); - } - } else { - _giftFxLog( - 'skip local play because special does not include ' - '${SCGiftType.ANIMSCION.name}/$kSCGiftAnimationSpecialAlias/${SCGiftType.GLOBAL_GIFT.name} ' - 'giftId=${gift.id} special=${gift.special}', - ); - } - } else { - _giftFxLog( - 'skip local play because giftSourceUrl or special is null ' - 'giftId=${gift.id} ' - 'giftSourceUrl=${gift.giftSourceUrl} ' - 'special=${gift.special}', - ); - } } } diff --git a/lib/modules/room/voice_room_page.dart b/lib/modules/room/voice_room_page.dart index 47cfbf4..2f85c93 100644 --- a/lib/modules/room/voice_room_page.dart +++ b/lib/modules/room/voice_room_page.dart @@ -727,35 +727,43 @@ class _VoiceRoomPageState extends State targetGroupKey == null || _markGiftVisualBatchForPlayback(msg, targetGroupKey); if (shouldPlayBatchVisuals) { - var giftModel = LGiftModel(); - giftModel.labelId = _buildGiftTickerLabelId(msg, targetGroupKey); - giftModel.sendUserName = msg.user?.userNickname ?? ""; - giftModel.sendToUserName = _resolveGiftTickerTargetName( - msg, - targetUserIds, + SCRoomEffectScheduler().scheduleDeferredEffect( + debugLabel: 'room_gift_ticker_${msg.type}_${msg.gift?.id ?? ""}', + action: () { + if (!mounted) { + return; + } + var giftModel = LGiftModel(); + giftModel.labelId = _buildGiftTickerLabelId(msg, targetGroupKey); + giftModel.sendUserName = msg.user?.userNickname ?? ""; + giftModel.sendToUserName = _resolveGiftTickerTargetName( + msg, + targetUserIds, + ); + giftModel.sendUserPic = msg.user?.userAvatar ?? ""; + giftModel.giftPic = msg.gift?.giftPhoto ?? ""; + giftModel.giftCount = msg.number ?? 0; + giftModel.giftCountStepUnit = _resolveGiftCountStepUnit(msg); + unawaited( + warmImageResource( + giftModel.sendUserPic, + logicalWidth: 26.w, + logicalHeight: 26.w, + ), + ); + unawaited( + warmImageResource( + giftModel.giftPic, + logicalWidth: 34.w, + logicalHeight: 34.w, + ), + ); + Provider.of( + context, + listen: false, + ).enqueueGiftAnimation(giftModel); + }, ); - giftModel.sendUserPic = msg.user?.userAvatar ?? ""; - giftModel.giftPic = msg.gift?.giftPhoto ?? ""; - giftModel.giftCount = msg.number ?? 0; - giftModel.giftCountStepUnit = _resolveGiftCountStepUnit(msg); - unawaited( - warmImageResource( - giftModel.sendUserPic, - logicalWidth: 26.w, - logicalHeight: 26.w, - ), - ); - unawaited( - warmImageResource( - giftModel.giftPic, - logicalWidth: 34.w, - logicalHeight: 34.w, - ), - ); - Provider.of( - context, - listen: false, - ).enqueueGiftAnimation(giftModel); } else { debugPrint( '[GiftFx][voice] skip gift ticker by visual batch dedupe ' diff --git a/lib/shared/data_sources/sources/local/floating_screen_manager.dart b/lib/shared/data_sources/sources/local/floating_screen_manager.dart index c2f36f5..c075317 100644 --- a/lib/shared/data_sources/sources/local/floating_screen_manager.dart +++ b/lib/shared/data_sources/sources/local/floating_screen_manager.dart @@ -85,13 +85,13 @@ class OverlayManager { SCFloatingMessage message, { required String debugLabel, }) { - unawaited(_warmMessageImages(message)); SCRoomEffectScheduler().scheduleDeferredEffect( debugLabel: debugLabel, action: () { if (_isDisposed || _isSuppressed) { return; } + unawaited(_warmMessageImages(message)); _messageQueue.add(message); _safeScheduleNext(); },