在 Compose Multiplatform 中从 URL 加载图像

Ahm*_*han 6 kotlin-multiplatform android-jetpack-compose compose-multiplatform

我目前正在开发一个使用 Compose Multiplatform 项目的项目,并寻找处理从 URL 加载图像的方法。但是,由于不支持 Coil,我还没有找到解决方案。

我遇到过一个转换位图的手动 Ktor 实现,但它缺乏缓存支持和其他实现细节(例如加载、错误状态)。

有没有人使用库集成图像加载或找到 Compose Multiplatform 的其他替代方案?

Mar*_*cko 1

Coil 已发布 3.0.0-alpha03 版本,支持多平台

基本配置如下,通常shared/build.gradle.kts

    kotlin {
        // targets configuration
        
        sourceSets {
            commonMain.dependencies {
                implementation("io.coil-kt.coil3:coil-compose:3.0.0-alpha03")
                implementation("io.coil-kt.coil3:coil-network-ktor:3.0.0-alpha03")
            }
            androidMain.dependencies {
                implementation("io.ktor:ktor-client-okhttp:2.3.7")
            }
            iosMain.dependencies {
                implementation("io.ktor:ktor-client-darwin:2.3.7")
            }
        }
    }   
Run Code Online (Sandbox Code Playgroud)

重要提示:要从 Coil 3.0 中的网络 URL 加载图像,您需要为每个源集导入单独的工件。

的基本用法AsyncImage

AsyncImage(
    model = "https://example.com/image.jpg", // replace with working URL 
    contentDescription = null
)
Run Code Online (Sandbox Code Playgroud)

对于加载和错误的更高级用法,请使用SubcomposeAsyncImage

如果您已经使用了线圈 2.x,请查看指南如何升级到线圈 3.x