From 1542f82dd24c1aec5bbe28c7625f7d6918eef6d0 Mon Sep 17 00:00:00 2001 From: zhx Date: Sat, 16 May 2026 02:03:51 +0800 Subject: [PATCH] Fix transparent profile card mp4 rendering --- .../props/sc_data_card_resource_view.dart | 4 +++ .../kotlin/com/laskarmedia/vap/VapView.kt | 26 ++++++++++++++----- .../ios/Classes/VapView.swift | 2 ++ .../lib/widgets/vap_view.dart | 17 ++++++++++++ 4 files changed, 42 insertions(+), 7 deletions(-) diff --git a/lib/ui_kit/widgets/props/sc_data_card_resource_view.dart b/lib/ui_kit/widgets/props/sc_data_card_resource_view.dart index 357619f..0a60271 100644 --- a/lib/ui_kit/widgets/props/sc_data_card_resource_view.dart +++ b/lib/ui_kit/widgets/props/sc_data_card_resource_view.dart @@ -329,6 +329,8 @@ class _LoopingDataCardVapVideo extends StatefulWidget { } class _LoopingDataCardVapVideoState extends State<_LoopingDataCardVapVideo> { + static const int _legacyRgbLeftAlphaRightMode = 3; + VapController? _controller; int _playToken = 0; bool _failed = false; @@ -386,6 +388,8 @@ class _LoopingDataCardVapVideoState extends State<_LoopingDataCardVapVideo> { return; } await controller.setMute(true); + await controller.enableVersion1(true); + await controller.setVideoMode(_legacyRgbLeftAlphaRightMode); await controller.setLoop(widget.loop ? -1 : 0); await controller.setScaleType(_scaleTypeForFit(widget.fit).key); if (!_isCurrent(token, controller)) { diff --git a/local_packages/tancent_vap-1.0.0+1/android/src/main/kotlin/com/laskarmedia/vap/VapView.kt b/local_packages/tancent_vap-1.0.0+1/android/src/main/kotlin/com/laskarmedia/vap/VapView.kt index 93a3928..f9e089a 100644 --- a/local_packages/tancent_vap-1.0.0+1/android/src/main/kotlin/com/laskarmedia/vap/VapView.kt +++ b/local_packages/tancent_vap-1.0.0+1/android/src/main/kotlin/com/laskarmedia/vap/VapView.kt @@ -258,13 +258,25 @@ class VapView( result.success(null) } - "setScaleType" -> { - val type = call.argument("scaleType") - setScaleType(type) - result.success(null) - } - - "setVapTagContent" -> { + "setScaleType" -> { + val type = call.argument("scaleType") + setScaleType(type) + result.success(null) + } + + "enableVersion1" -> { + val enable = call.argument("enable") ?: false + animView.enableVersion1(enable) + result.success(null) + } + + "setVideoMode" -> { + val mode = call.argument("mode") ?: 1 + animView.setVideoMode(mode) + result.success(null) + } + + "setVapTagContent" -> { val tag = call.argument("tag") val contentMap = call.argument>("content") if (tag != null && contentMap != null) { diff --git a/local_packages/tancent_vap-1.0.0+1/ios/Classes/VapView.swift b/local_packages/tancent_vap-1.0.0+1/ios/Classes/VapView.swift index 226c71d..9cbd53e 100644 --- a/local_packages/tancent_vap-1.0.0+1/ios/Classes/VapView.swift +++ b/local_packages/tancent_vap-1.0.0+1/ios/Classes/VapView.swift @@ -67,6 +67,8 @@ public class VapFlutterView: NSObject, FlutterPlatformView { scaleType = value } result(nil) + case "enableVersion1", "setVideoMode": + result(nil) case "setVapTagContent": if let args = call.arguments as? [String: Any], let tag = args["tag"] as? String, diff --git a/local_packages/tancent_vap-1.0.0+1/lib/widgets/vap_view.dart b/local_packages/tancent_vap-1.0.0+1/lib/widgets/vap_view.dart index 41afc68..65ec62c 100644 --- a/local_packages/tancent_vap-1.0.0+1/lib/widgets/vap_view.dart +++ b/local_packages/tancent_vap-1.0.0+1/lib/widgets/vap_view.dart @@ -396,6 +396,23 @@ class VapController { await __channel.invokeMethod('setScaleType', {'scaleType': scaleType}); } + /// Enables compatibility mode for legacy RGB/alpha split MP4 resources + /// that do not contain a VAP config box. + Future enableVersion1(bool enable) async { + await __channel.invokeMethod('enableVersion1', {'enable': enable}); + } + + /// Sets legacy split MP4 mode. + /// + /// Tencent VAP values: + /// - 1: alpha left, RGB right + /// - 2: alpha top, RGB bottom + /// - 3: RGB left, alpha right + /// - 4: RGB top, alpha bottom + Future setVideoMode(int mode) async { + await __channel.invokeMethod('setVideoMode', {'mode': mode}); + } + /// Sets content for a specific VAP tag. /// /// VAP tags are placeholders in the animation file that can be replaced