From 3416adb104d7d47966c36a1b22cd18783840dcff Mon Sep 17 00:00:00 2001 From: tshmieldev Date: Tue, 22 Sep 2026 15:23:40 +0200 Subject: [PATCH] fix(android): skip null gradient color stop positions instead of warning processBackgroundImage emits `position: null` for every color stop that has no explicit position, which is the common case (`linear-gradient(red, blue)`). LinearGradient and RadialGradient passed that null straight to LengthPercentage.setFromDynamic, which logs "Unsupported type for radius property: Null" for each such stop on every props update. With an animated backgroundImage this floods logcat at 60 Hz. Check for a null position first, the same way BackgroundPosition already does, so a missing position is treated as "auto" without a warning. --- .../com/facebook/react/uimanager/style/LinearGradient.kt | 6 +++++- .../com/facebook/react/uimanager/style/RadialGradient.kt | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LinearGradient.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LinearGradient.kt index 57a90bcbc738..41050bf0a358 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LinearGradient.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/LinearGradient.kt @@ -72,7 +72,11 @@ internal class LinearGradient(val direction: Direction, val colorStops: List colorStop.getInt("color") } val colorStopPosition = - LengthPercentage.setFromDynamic(colorStop.getDynamic("position")) + if (colorStop.hasKey("position") && !colorStop.isNull("position")) { + LengthPercentage.setFromDynamic(colorStop.getDynamic("position")) + } else { + null + } stops.add(ColorStop(color, colorStopPosition)) } stops diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/RadialGradient.kt b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/RadialGradient.kt index 8aef78ebc92d..747c22e7c193 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/RadialGradient.kt +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/uimanager/style/RadialGradient.kt @@ -128,7 +128,11 @@ internal class RadialGradient( else -> colorStop.getInt("color") } val colorStopPosition = - LengthPercentage.setFromDynamic(colorStop.getDynamic("position")) + if (colorStop.hasKey("position") && !colorStop.isNull("position")) { + LengthPercentage.setFromDynamic(colorStop.getDynamic("position")) + } else { + null + } stops.add(ColorStop(color, colorStopPosition)) } stops