You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

使用Coil + Jetpack Compose + Kotlin加载网络视频缩略图时遇函数调用错误求助

使用Coil + Jetpack Compose + Kotlin加载网络视频缩略图时遇函数调用错误求助

嘿,我一眼就揪出问题根源啦——你这是混用了Coil不同大版本的依赖,导致API不兼容才触发的函数调用错误,咱们一步步来搞定它:

问题核心

你同时引入了Coil 2.x版本的coil-compose(2.5.0)Coil 3.x版本的coil-video(3.0.3),这两个大版本的API结构差异很大:不仅包命名规则变了,组件注册的方法参数要求也不一样,所以add(VideoFrameDecoder.Factory())才会弹出“没有可用的匹配函数”的错误提示。

解决方案:统一Coil版本

你有两个可选方案,选其中一种执行即可:

方案1:升级到Coil 3.x(推荐,新版本功能更完善)

先把依赖全部换成统一的Coil 3.x版本,注意Coil 3的coil-compose依赖路径和2.x不一样:

implementation("io.coil-kt.coil3:coil-compose:3.0.3")
implementation("io.coil-kt.coil3:coil-video:3.0.3")

然后调整ImageLoader的构建代码,对齐Coil 3的API(包导入路径也要更新):

import coil3.ImageLoader
import coil3.video.VideoFrameDecoder
import coil3.compose.setSingletonImageLoader

val videoEnabledLoader = ImageLoader.Builder(context)
    .components {
        add(VideoFrameDecoder.Factory())
    }
    .build()

// 在Compose环境中,记得设置全局或局部的ImageLoader
setSingletonImageLoader(videoEnabledLoader)

方案2:降级到统一的Coil 2.x版本

如果暂时不想升级大版本,就把coil-video换成和coil-compose同版本的2.5.0:

implementation("io.coil-kt:coil-compose:2.5.0")
implementation("io.coil-kt:coil-video:2.5.0")

对应的ImageLoader代码可以保留你原本的写法(包导入用2.x的路径):

import coil.ImageLoader
import coil.video.VideoFrameDecoder

val videoEnabledLoader = ImageLoader.Builder(context)
    .components {
        add(VideoFrameDecoder.Factory())
    }
    .build()

只要把依赖版本统一,这个函数调用错误应该就会消失,之后就能正常加载网络视频的缩略图了。

备注:内容来源于stack exchange,提问作者Ernest Muhumuza

火山引擎 最新活动