panpf / zoomimage

ZoomImage is an gesture zoom viewing of images library specially designed for Compose Multiplatform and Android View. Supported scale, pan, locate, rotation, and super-large image subsampling.
Apache License 2.0
303 stars 16 forks source link

Support Coil 3.0.0-rc01 #48

Open FunkyMuse opened 14 hours ago

FunkyMuse commented 14 hours ago

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

Affected components

Select of the components below:

Versions

Running Devices

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

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

FunkyMuse commented 14 hours ago

also ktor 3.0.0 is now stable

panpf commented 14 hours ago

It's already in the plan, so stay tuned