landscapist: Problem in preview
Lib Version : implementation "com.github.skydoves:landscapist-glide:1.3.9"
Testing Demo Code :
GlideImage(
imageModel = R.drawable.ic_launcher_background,
contentScale = ContentScale.Crop,
modifier = Modifier.aspectRatio(1f),
loading = {
ConstraintLayout(modifier = Modifier.fillMaxSize()) {
val indicator = createRef()
CircularProgressIndicator(
modifier = Modifier
.aspectRatio(1f)
.constrainAs(indicator) {
top.linkTo(parent.top)
bottom.linkTo(parent.bottom)
start.linkTo(parent.start)
end.linkTo(parent.end)
}
.defaultMinSize(128.dp)
)
}
},
failure = {
Text(text = "load failed!", )
})
Error : Render Problem in Design
java.lang.IllegalStateException: You cannot call Glide.get() in registerComponents(), use the provided Glide instance instead at com.bumptech.glide.Glide.checkAndInitializeGlide(Glide.java:205) at com.bumptech.glide.Glide.get(Glide.java:191) at com.bumptech.glide.Glide.getRetriever(Glide.java:774) at com.bumptech.glide.Glide.with(Glide.java:801) at com.skydoves.landscapist.glide.LocalGlideProvider.getGlideRequestManager(LocalGlideProvider.kt:75) at com.skydoves.landscapist.glide.LocalGlideProvider.getGlideRequestBuilder(LocalGlideProvider.kt:63) at com.skydoves.landscapist.glide.GlideImage__GlideImageKt.GlideImage(GlideImage.kt:369) at com.skydoves.landscapist.glide.GlideImage.GlideImage(GlideImage.kt:1) at com.ist.jetpackcompose.views.ComposeImageKt.GlideImageLoaderRounded(ComposeImage.kt:90) at com.ist.jetpackcompose.ui.screen.list.GridActivityKt$GridItem$2.invoke(GridActivity.kt:123) at com.ist.jetpackcompose.ui.screen.list.GridActivityKt$GridItem$2.invoke(GridActivity.kt:121) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:267) at androidx.compose.material.SurfaceKt$Surface$6.invoke(Surface.kt:254) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215) at androidx.compose.material.SurfaceKt.Surface-F-jzlyU(Surface.kt:251) at androidx.compose.material.SurfaceKt.Surface-9VG74zQ(Surface.kt:214) at androidx.compose.material.CardKt.Card-9VG74zQ(Card.kt:126) at com.ist.jetpackcompose.ui.screen.list.GridActivityKt.GridItem(GridActivity.kt:111) at com.ist.jetpackcompose.ui.screen.list.GridActivityKt$GridActivityPreview$1$1$2$1$invoke$$inlined$items$1.invoke(LazyGrid.kt:240) at com.ist.jetpackcompose.ui.screen.list.GridActivityKt$GridActivityPreview$1$1$2$1$invoke$$inlined$items$1.invoke(LazyGrid.kt:135) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:135) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.foundation.lazy.LazyGridScopeImpl$items$1$1.invoke(LazyGrid.kt:235) at androidx.compose.foundation.lazy.LazyGridScopeImpl$items$1$1.invoke(LazyGrid.kt:235) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.foundation.lazy.LazyGridKt$FixedLazyGrid$1$1.invoke(LazyGrid.kt:205) at androidx.compose.foundation.lazy.LazyGridKt$FixedLazyGrid$1$1.invoke(LazyGrid.kt:196) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:135) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.foundation.lazy.LazyListScopeImpl$items$1$1.invoke(LazyDsl.kt:200) at androidx.compose.foundation.lazy.LazyListScopeImpl$items$1$1.invoke(LazyDsl.kt:200) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.runtime.CompositionLocalKt.CompositionLocalProvider(CompositionLocal.kt:215) at androidx.compose.runtime.saveable.SaveableStateHolderImpl.SaveableStateProvider(SaveableStateHolder.kt:84) at androidx.compose.foundation.lazy.LazyListItemContentFactory$CachedItemContent$content$1.invoke(LazyListItemContentFactory.kt:113) at androidx.compose.foundation.lazy.LazyListItemContentFactory$CachedItemContent$content$1.invoke(LazyListItemContentFactory.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:241) at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2$1$1.invoke(SubcomposeLayout.kt:241) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:107) at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:34) at androidx.compose.runtime.ComposerKt.invokeComposable(Composer.kt:3332) at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2577) at androidx.compose.runtime.ComposerImpl$doCompose$2$5.invoke(Composer.kt:2566) at androidx.compose.runtime.SnapshotStateKt.observeDerivedStateRecalculations(SnapshotState.kt:540) at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:2566) at androidx.compose.runtime.ComposerImpl.composeContent$runtime_release(Composer.kt:2517) at androidx.compose.runtime.CompositionImpl.composeContent(Composition.kt:477) at androidx.compose.runtime.Recomposer.composeInitial$runtime_release(Recomposer.kt:727) at androidx.compose.runtime.ComposerImpl$CompositionContextImpl.composeInitial$runtime_release(Composer.kt:2982) at androidx.compose.runtime.CompositionImpl.setContent(Composition.kt:433) at androidx.compose.ui.layout.SubcomposeLayoutState.subcomposeInto(SubcomposeLayout.kt:259) at androidx.compose.ui.layout.SubcomposeLayoutState.access$subcomposeInto(SubcomposeLayout.kt:145) at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:234) at androidx.compose.ui.layout.SubcomposeLayoutState$subcompose$2.invoke(SubcomposeLayout.kt:231) at androidx.compose.runtime.snapshots.SnapshotStateObserver.withNoObservations(SnapshotStateObserver.kt:144) at androidx.compose.ui.node.OwnerSnapshotObserver.withNoSnapshotReadObservation$ui_release(OwnerSnapshotObserver.kt:49) at androidx.compose.ui.node.LayoutNode.withNoSnapshotReadObservation$ui_release(LayoutNode.kt:1107) at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:231) at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose(SubcomposeLayout.kt:226) at androidx.compose.ui.layout.SubcomposeLayoutState.subcompose$ui_release(SubcomposeLayout.kt:215) at androidx.compose.ui.layout.SubcomposeLayoutState$Scope.subcompose(SubcomposeLayout.kt:466) at androidx.compose.foundation.lazy.LazyMeasuredItemProvider.getAndMeasure-ZjPyQlc(LazyMeasuredItemProvider.kt:48) at androidx.compose.foundation.lazy.LazyListMeasureKt.measureLazyList-9CW8viI(LazyListMeasure.kt:145) at androidx.compose.foundation.lazy.LazyListKt$LazyList$1.invoke-0kLqBqw(LazyList.kt:152) at androidx.compose.foundation.lazy.LazyListKt$LazyList$1.invoke(LazyList.kt:76) at androidx.compose.ui.layout.SubcomposeLayoutState$createMeasurePolicy$1.measure-3p2s80s(SubcomposeLayout.kt:345) at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43) at androidx.compose.foundation.layout.PaddingValuesModifier.measure-3p2s80s(Padding.kt:417) at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39) at androidx.compose.ui.graphics.SimpleGraphicsLayerModifier.measure-3p2s80s(GraphicsLayerModifier.kt:219) at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39) at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116) at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116) at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:128) at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75) at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63) at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99) at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:71) at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1227) at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.measure-3p2s80s(RowColumnImpl.kt:89) at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43) at androidx.compose.foundation.layout.FillModifier.measure-3p2s80s(Size.kt:627) at androidx.compose.ui.node.ModifiedLayoutNode.measure-BRTryo0(ModifiedLayoutNode.kt:39) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:128) at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75) at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63) at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99) at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:71) at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1227) at androidx.compose.foundation.layout.RowColumnImplKt$rowColumnMeasurePolicy$1.measure-3p2s80s(RowColumnImpl.kt:89) at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:128) at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75) at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63) at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99) at androidx.compose.ui.node.OuterMeasurablePlaceable.measure-BRTryo0(OuterMeasurablePlaceable.kt:71) at androidx.compose.ui.node.LayoutNode.measure-BRTryo0(LayoutNode.kt:1227) at androidx.compose.ui.layout.RootMeasurePolicy.measure-3p2s80s(RootMeasurePolicy.kt:38) at androidx.compose.ui.node.InnerPlaceable.measure-BRTryo0(InnerPlaceable.kt:43) at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116) at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116) at androidx.compose.ui.node.DelegatingLayoutNodeWrapper.measure-BRTryo0(DelegatingLayoutNodeWrapper.kt:116) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:100) at androidx.compose.ui.node.OuterMeasurablePlaceable$remeasure$3.invoke(OuterMeasurablePlaceable.kt:99) at androidx.compose.runtime.snapshots.Snapshot$Companion.observe(Snapshot.kt:1776) at androidx.compose.runtime.snapshots.SnapshotStateObserver.observeReads(SnapshotStateObserver.kt:123) at androidx.compose.ui.node.OwnerSnapshotObserver.observeReads$ui_release(OwnerSnapshotObserver.kt:75) at androidx.compose.ui.node.OwnerSnapshotObserver.observeMeasureSnapshotReads$ui_release(OwnerSnapshotObserver.kt:63) at androidx.compose.ui.node.OuterMeasurablePlaceable.remeasure-BRTryo0(OuterMeasurablePlaceable.kt:99) at androidx.compose.ui.node.LayoutNode.remeasure-_Sx5XlM$ui_release(LayoutNode.kt:1236) at androidx.compose.ui.node.MeasureAndLayoutDelegate.doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.kt:169) at androidx.compose.ui.node.MeasureAndLayoutDelegate.access$doRemeasure-0kLqBqw(MeasureAndLayoutDelegate.kt:38) at androidx.compose.ui.node.MeasureAndLayoutDelegate.measureAndLayout(MeasureAndLayoutDelegate.kt:207) at androidx.compose.ui.platform.AndroidComposeView.onMeasure_Original(AndroidComposeView.android.kt:547) at androidx.compose.ui.platform.AndroidComposeView.onMeasure(AndroidComposeView.android.kt:-1) at android.view.View.measure_Original(View.java:25466) at android.view.View_Delegate.measure(View_Delegate.java:80) at android.view.View.measure(View.java:25430) at androidx.compose.ui.platform.AbstractComposeView.internalOnMeasure$ui_release(ComposeView.android.kt:278) at androidx.compose.ui.platform.AbstractComposeView.onMeasure_Original(ComposeView.android.kt:265) at androidx.compose.ui.platform.AbstractComposeView.onMeasure(ComposeView.android.kt:-1) at android.view.View.measure_Original(View.java:25466) at android.view.View_Delegate.measure(View_Delegate.java:80) at android.view.View.measure(View.java:25430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure_Original(View.java:25466) at android.view.View_Delegate.measure(View_Delegate.java:80) at android.view.View.measure(View.java:25430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure_Original(View.java:25466) at android.view.View_Delegate.measure(View_Delegate.java:80) at android.view.View.measure(View.java:25430) at android.widget.RelativeLayout.measureChildHorizontal(RelativeLayout.java:735) at android.widget.RelativeLayout.onMeasure(RelativeLayout.java:481) at android.view.View.measure_Original(View.java:25466) at android.view.View_Delegate.measure(View_Delegate.java:80) at android.view.View.measure(View.java:25430) at android.view.ViewGroup.measureChildWithMargins(ViewGroup.java:6957) at android.widget.FrameLayout.onMeasure(FrameLayout.java:194) at android.view.View.measure_Original(View.java:25466) at android.view.View_Delegate.measure(View_Delegate.java:80) at android.view.View.measure(View.java:25430)
About this issue
- Original URL
- State: closed
- Created 3 years ago
- Comments: 18 (9 by maintainers)
Hey @androidapkr, in the new stable
1.4.0
, we can resolve this issue like the below. A new parameterpreviewPlaceHolder
has been added. 😃Hi @skydoves - yes I can build it. Preview does work.
However, the previews in
MainPosters.kt
do not use a GlideImage. When I replace theFrescoImage
in theHomePoster()
composable with aGlideImage
, preview crashes with the same issue:https://github.com/nosyjoe/Landscapist/commit/7f6e6d5ebfa72ba438089d79e6241ab207bedc6a
Hope this helps!
@skydoves it does work well. Both preview and in an app. Thanks for the quick fix!
I tried a solution that solves it for me, allows the preview to render and the app to run, with minimal changes: I changed the
requestBuilder
parameter type fromRequestBuilder<Drawable>
to@Composable () -> RequestBuilder<Drawable>
so that the default parameter value is not evaluated immediately.Here’s the diff: https://github.com/nosyjoe/Landscapist/commit/899a0b8c3f4db061e0b875a591daf89928881749
What do you think?
@skydoves thanks for the update. Unfortunately, using version
1.4.1
, I’m still getting the crash that the @androidapkr has initially reported . And unfortunately no image 😦Even when specifying a previewPlaceHolder, a Glide /
RequestBuilder
instance is being constructed by the default parameter value:https://github.com/skydoves/Landscapist/blob/09a79ed8d031db98895c835691308dc54db3b527/glide/src/main/java/com/skydoves/landscapist/glide/GlideImage.kt#L398
Anything we can do here?
That’s a great alternative one! If I find a nicer solution, I will share it on this thread.
@skydoves thank you guiding PreviewParameterProvider
There is same library for Glide on compose
implementation "com.google.accompanist:accompanist-glide:0.10.0"
but it has same issue that i mentioned earlier. So rather to stuck on issue of Preview by Android studio, i move with below solutions, and waiting for Android studio and Glide update for this.I make some changes in code for preview and debug/run, i make condition to whether data is display for preview and debug/run into device.
To display preview correctly, have to use below method
This is trick but it can save much time to suck in Preview Mode in Comose. Hope this can help.
I’m not sure but I guess we can resolve this issue using the
PreviewParameterProvider
.