panpf/zoomimage

Support Coil 3.0.0-rc01

Closed this issue · 14 comments

Describe the bug

16:43:44.578  W  java.lang.NoSuchMethodError: No static method Dimension(I)Lcoil3/size/Dimension$Pixels; in class Lcoil3/size/DimensionKt; or its super classes (declaration of 'coil3.size.DimensionKt' appears in /data/app/~~i8NVsQU7VCKUQ47h6PorRw==/com.x.x.x.debug-FNxlFgCYc1GHtCnjOj9OOw==/base.apk)
16:43:44.578  W  	at com.github.panpf.zoomimage.compose.coil.internal.BaseZoomAsyncImageKt.toSizeOrNull-BRTryo0(BaseZoomAsyncImage.kt:193)
16:43:44.578  W  	at com.github.panpf.zoomimage.compose.coil.internal.BaseZoomAsyncImageKt.access$toSizeOrNull-BRTryo0(BaseZoomAsyncImage.kt:1)
16:43:44.578  W  	at com.github.panpf.zoomimage.compose.coil.internal.ConstraintsSizeResolver$size$$inlined$mapNotNull$1$2.emit(Emitters.kt:220)
16:43:44.578  W  	at kotlinx.coroutines.flow.StateFlowImpl.collect(StateFlow.kt:401)
16:43:44.578  W  	at com.github.panpf.zoomimage.compose.coil.internal.ConstraintsSizeResolver$size$$inlined$mapNotNull$1.collect(SafeCollector.common.kt:112)
16:43:44.578  W  	at kotlinx.coroutines.flow.FlowKt__ReduceKt.first(Reduce.kt:194)
16:43:44.578  W  	at kotlinx.coroutines.flow.FlowKt.first(Unknown Source:1)
16:43:44.578  W  	at com.github.panpf.zoomimage.compose.coil.internal.ConstraintsSizeResolver.size(BaseZoomAsyncImage.kt:156)
16:43:44.579  W  	at coil3.RealImageLoader.execute(RealImageLoader.kt:130)
16:43:44.579  W  	at coil3.RealImageLoader.execute(RealImageLoader.kt:90)
16:43:44.579  W  	at coil3.compose.AsyncImagePainter$onRemembered$1$2$1.invokeSuspend(AsyncImagePainter.kt:244)
16:43:44.579  W  	at coil3.compose.AsyncImagePainter$onRemembered$1$2$1.invoke(Unknown Source:8)
16:43:44.579  W  	at coil3.compose.AsyncImagePainter$onRemembered$1$2$1.invoke(Unknown Source:4)
16:43:44.579  W  	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invokeSuspend(Merge.kt:213)
16:43:44.579  W  	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invoke(Unknown Source:13)
16:43:44.579  W  	at kotlinx.coroutines.flow.FlowKt__MergeKt$mapLatest$1.invoke(Unknown Source:4)
16:43:44.579  W  	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invokeSuspend(Merge.kt:30)
16:43:44.579  W  	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invoke(Unknown Source:8)
16:43:44.579  W  	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1$2.invoke(Unknown Source:4)
16:43:44.579  W  	at kotlinx.coroutines.intrinsics.UndispatchedKt.startCoroutineUndispatched(Undispatched.kt:20)
16:43:44.579  W  	at kotlinx.coroutines.CoroutineStart.invoke(CoroutineStart.kt:360)
16:43:44.579  W  	at kotlinx.coroutines.AbstractCoroutine.start(AbstractCoroutine.kt:124)
16:43:44.579  W  	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch(Builders.common.kt:52)
16:43:44.579  W  	at kotlinx.coroutines.BuildersKt.launch(Unknown Source:1)
16:43:44.579  W  	at kotlinx.coroutines.BuildersKt__Builders_commonKt.launch$default(Builders.common.kt:43)
16:43:44.579  W  	at kotlinx.coroutines.BuildersKt.launch$default(Unknown Source:1)
16:43:44.579  W  	at kotlinx.coroutines.flow.internal.ChannelFlowTransformLatest$flowCollect$3$1.emit(Merge.kt:29)
16:43:44.579  W  	at kotlinx.coroutines.flow.FlowKt__ChannelsKt.emitAllImpl$FlowKt__ChannelsKt(Channels.kt:33)
16:43:44.579  W  	at kotlinx.coroutines.flow.FlowKt__ChannelsKt.access$emitAllImpl$FlowKt__ChannelsKt(Channels.kt:1)
16:43:44.579  W  	at kotlinx.coroutines.flow.FlowKt__ChannelsKt$emitAllImpl$1.invokeSuspend(Unknown Source:14)
16:43:44.579  W  	at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
16:43:44.579  W  	at kotlinx.coroutines.DispatchedTask.run(DispatchedTask.kt:101)
16:43:44.580  W  	at kotlinx.coroutines.EventLoop.processUnconfinedEvent(EventLoop.common.kt:65)
16:43:44.580  W  	at kotlinx.coroutines.DispatchedTaskKt.resumeUnconfined(DispatchedTask.kt:231)
16:43:44.580  W  	at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:149)
16:43:44.580  W  	at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:470)
16:43:44.580  W  	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core(CancellableContinuationImpl.kt:504)
16:43:44.580  W  	at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$kotlinx_coroutines_core$default(CancellableContinuationImpl.kt:493)
16:43:44.580  W  	at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:359)
16:43:44.580  W  	at kotlinx.coroutines.flow.StateFlowSlot.makePending(StateFlow.kt:290)
16:43:44.580  W  	at kotlinx.coroutines.flow.StateFlowImpl.updateState(StateFlow.kt:354)
16:43:44.580  W  	at kotlinx.coroutines.flow.StateFlowImpl.setValue(StateFlow.kt:321)
16:43:44.580  W  	at coil3.compose.AsyncImagePainterKt.rememberAsyncImagePainter-GSdzBsE(AsyncImagePainter.kt:158)
16:43:44.580  W  	at coil3.compose.AsyncImagePainterKt.rememberAsyncImagePainter-0YpotYA(AsyncImagePainter.kt:131)
16:43:44.580  W  	at com.github.panpf.zoomimage.compose.coil.internal.BaseZoomAsyncImageKt.BaseZoomAsyncImage-3HmZ8SU(BaseZoomAsyncImage.kt:88)
16:43:44.580  W  	at com.github.panpf.zoomimage.CoilZoomAsyncImageKt.CoilZoomAsyncImage-s_Z8080(CoilZoomAsyncImage.kt:235)
16:43:44.580  W  	at com.github.panpf.zoomimage.CoilZoomAsyncImageKt.CoilZoomAsyncImage-XSgcHvQ(CoilZoomAsyncImage.kt:144)
16:43:44.580  W  	at com.github.panpf.zoomimage.SingletonCoilZoomAsyncImageKt.CoilZoomAsyncImage-nmK0i78(SingletonCoilZoomAsyncImage.kt:119)
16:43:44.580  W  	at com.pixezia.wallpaper.wallhub.features.wallpaper.ui.WallpaperDetailsScreenKt.WallpaperDetailsScreen(WallpaperDetailsScreen.kt:50)
16:43:44.580  W  	at com.pixezia.wallpaper.wallhub.features.wallpaper.ui.ComposableSingletons$WallpaperDetailsContentKt$lambda-1$1.invoke(WallpaperDetailsContent.kt:16)
16:43:44.581  W  	at com.pixezia.wallpaper.wallhub.features.wallpaper.ui.ComposableSingletons$WallpaperDetailsContentKt$lambda-1$1.invoke(WallpaperDetailsContent.kt:12)
16:43:44.581  W  	at androidx.compose.runtime.internal.ComposableLambdaImpl.invoke(ComposableLambda.jvm.kt:139)
16:43:44.581  W  	at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$2.invoke(ComposableLambda.jvm.kt:146)
16:43:44.581  W  	at androidx.compose.runtime.internal.ComposableLambdaImpl$invoke$2.invoke(ComposableLambda.jvm.kt:145)
16:43:44.581  W  	at androidx.compose.runtime.RecomposeScopeImpl.compose(RecomposeScopeImpl.kt:192)
16:43:44.581  W  	at androidx.compose.runtime.ComposerImpl.recomposeToGroupEnd(Composer.kt:2825)
16:43:44.581  W  	at androidx.compose.runtime.ComposerImpl.skipCurrentGroup(Composer.kt:3116)
16:43:44.581  W  	at androidx.compose.runtime.ComposerImpl.doCompose(Composer.kt:3607)
16:43:44.581  W  	at androidx.compose.runtime.ComposerImpl.recompose$runtime_release(Composer.kt:3552)
16:43:44.581  W  	at androidx.compose.runtime.CompositionImpl.recompose(Composition.kt:948)
16:43:44.581  W  	at androidx.compose.runtime.Recomposer.performRecompose(Recomposer.kt:1206)
16:43:44.582  W  	at androidx.compose.runtime.Recomposer.access$performRecompose(Recomposer.kt:132)
16:43:44.582  W  	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:616)
16:43:44.582  W  	at androidx.compose.runtime.Recomposer$runRecomposeAndApplyChanges$2$1.invoke(Recomposer.kt:585)
16:43:44.582  W  	at androidx.compose.ui.platform.AndroidUiFrameClock$withFrameNanos$2$callback$1.doFrame(AndroidUiFrameClock.android.kt:41)
16:43:44.582  W  	at androidx.compose.ui.platform.AndroidUiDispatcher.performFrameDispatch(AndroidUiDispatcher.android.kt:109)
16:43:44.582  W  	at androidx.compose.ui.platform.AndroidUiDispatcher.access$performFrameDispatch(AndroidUiDispatcher.android.kt:41)
16:43:44.582  W  	at androidx.compose.ui.platform.AndroidUiDispatcher$dispatchCallback$1.doFrame(AndroidUiDispatcher.android.kt:69)
16:43:44.582  W  	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1337)
16:43:44.582  W  	at android.view.Choreographer$CallbackRecord.run(Choreographer.java:1348)
16:43:44.582  W  	at android.view.Choreographer.doCallbacks(Choreographer.java:952)
16:43:44.582  W  	at android.view.Choreographer.doFrame(Choreographer.java:878)
16:43:44.582  W  	at android.view.Choreographer$FrameDisplayEventReceiver.run(Choreographer.java:1322)
16:43:44.582  W  	at android.os.Handler.handleCallback(Handler.java:958)
16:43:44.582  W  	at android.os.Handler.dispatchMessage(Handler.java:99)
16:43:44.582  W  	at android.os.Looper.loopOnce(Looper.java:205)
16:43:44.582  W  	at android.os.Looper.loop(Looper.java:294)
16:43:44.582  W  	at android.app.ActivityThread.main(ActivityThread.java:8177)
16:43:44.582  W  	at java.lang.reflect.Method.invoke(Native Method)
16:43:44.582  W  	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:552)
16:43:44.582  W  	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:971)

Affected platforms

  • Android, iOS, Desltop

Affected components

Select of the components below:

  • CoilAsyncZoomImage

Versions

  • zoomimage version*: 1.1.0-beta01
  • Kotlin version*: 2.1.0-Beta1
  • Compose version(s)* (Jetpack/Multiplatform): 1.7.0
  • JDK version(Only Desktop): 17
  • coil version: 3.0.0-rc01

Running Devices

Please accurately describe the device Model, OS version, and CPU Architecture

  • Pixel 8 Pro

Sample code

 val coilZoomState =
        rememberCoilZoomState(logLevel = com.github.panpf.zoomimage.util.Logger.Level.Verbose)

CoilZoomAsyncImage(
            zoomState = coilZoomState,
            model = imageUrl,
            contentDescription = null,
            modifier = Modifier.matchParentSize(),
            filterQuality = FilterQuality.High,
            contentScale = ContentScale.Crop,
            onError = {
                it.result.throwable.printStackTrace()
            }
        )

Expected behavior

Coil 3.0.0-rc01 should be supported, currently can't use it

also ktor 3.0.0 is now stable

It's already in the plan, so stay tuned

It's already in the plan, so stay tuned

Thanks for the reply, hate to be the one who say this but is there any estimate when it'll be done?

We're nearing a release and would like to test if some things break before pushing out in the open.

If there is a snapshot, we'd be glad to test it btw

Sorry that we can't adapt to the new version immediately. It will take at least two weeks.

Because there are too many things to do recently, and there are other problems that need to be fixed at the same time.

You can first depend on the zoomimage-core module, then copy the coil3 related code to your project and fix the problem (it should only require a small amount of modification)

Sorry that we can't adapt to the new version immediately. It will take at least two weeks.

Because there are too many things to do recently, and there are other problems that need to be fixed at the same time.

You can first depend on the zoomimage-core module, then copy the coil3 related code to your project and fix the problem (it should only require a small amount of modification)

Do you take PRs?

Yes, PRs are welcome

Yes, PRs are welcome

Couldn't sync the project

 Could not find io.github.panpf.sketch4:sketch-animated-gif:4.0.0-beta01-SNAPSHOT.
 Could not find io.github.panpf.sketch4:sketch-compose-resources:4.0.0-beta01-SNAPSHOT.
Could not find io.github.panpf.sketch4:sketch-extensions-compose:4.0.0-beta01-SNAPSHOT.

Don't use the dev branch, use the main branch

Don't use the dev branch, use the main branch

#51

When can we merge this?

We are about to start working on this issue, this is the last issue for this version. Expect a new version this week

We are about to start working on this issue, this is the last issue for this version. Expect a new version this week

Should i close the PR then?

This feature has been added in v1.1.0-rc01.