diff --git a/Libraries/Image/Image.android.js b/Libraries/Image/Image.android.js index d0e685a5e..6f0a312e9 100644 --- a/Libraries/Image/Image.android.js +++ b/Libraries/Image/Image.android.js @@ -190,9 +190,6 @@ let Image = ( props.loadingIndicatorSource, ); - // As opposed to the ios version, here we render `null` when there is no source, source.uri - // or source array. - if (source && source.uri === '') { console.warn('source.uri should not be an empty string'); } @@ -215,13 +212,9 @@ let Image = ( ); } - if (!source || (!source.uri && !Array.isArray(source))) { - return null; - } - let style; let sources; - if (source.uri) { + if (source?.uri != null) { const {width, height} = source; style = flattenStyle([{width, height}, styles.base, props.style]); sources = [{uri: source.uri}]; @@ -235,7 +228,7 @@ let Image = ( style, shouldNotifyLoadEvents: !!(onLoadStart || onLoad || onLoadEnd || onError), src: sources, - headers: source.headers, + headers: source?.headers, defaultSrc: defaultSource ? defaultSource.uri : null, loadingIndicatorSrc: loadingIndicatorSource ? loadingIndicatorSource.uri diff --git a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java index 440bf3f2c..cf7a1580f 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java +++ b/ReactAndroid/src/main/java/com/facebook/react/views/image/ReactImageView.java @@ -70,6 +70,9 @@ public class ReactImageView extends GenericDraweeView { public static final int REMOTE_IMAGE_FADE_DURATION_MS = 300; + public static final String REMOTE_TRANSPARENT_BITMAP_URI = + "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mNkYAAAAAYAAjCB0C8AAAAASUVORK5CYII="; + private static float[] sComputedCornerRadii = new float[4]; /* @@ -338,7 +341,10 @@ public class ReactImageView extends GenericDraweeView { public void setSource(@Nullable ReadableArray sources) { mSources.clear(); - if (sources != null && sources.size() != 0) { + if (sources == null || sources.size() == 0) { + ImageSource imageSource = new ImageSource(getContext(), REMOTE_TRANSPARENT_BITMAP_URI); + mSources.add(imageSource); + } else { // Optimize for the case where we have just one uri, case in which we don't need the sizes if (sources.size() == 1) { ReadableMap source = sources.getMap(0); @@ -572,9 +578,9 @@ public class ReactImageView extends GenericDraweeView { private void setSourceImage() { mImageSource = null; if (mSources.isEmpty()) { - return; - } - if (hasMultipleSources()) { + ImageSource imageSource = new ImageSource(getContext(), REMOTE_TRANSPARENT_BITMAP_URI); + mSources.add(imageSource); + } else if (hasMultipleSources()) { MultiSourceResult multiSource = MultiSourceHelper.getBestSourceForSize(getWidth(), getHeight(), mSources); mImageSource = multiSource.getBestResult(); @@ -609,4 +615,3 @@ public class ReactImageView extends GenericDraweeView { } } } -