Compose Multiplatform 下图片加载支持
早期由于 Android 主要的社区图片组件库(例如 Glide、Coil)在 Google Jetpack Compose 的支持上还不算好,因此当时基于 Glide 做了一个 akit 的 Compose 图片支持库,主要用于处理社区图片库一些在 Compose 上不支持的问题和 bugfix 可参考 《使用 Glide 在 Compose 中加载图片 》。 随着公司基建的发展,开始对 Compose Multiplatform 进行支持,其中图片库就是其中的一个挑战: CMP 的支持并非直接全迁移,而是迁移基础模块,业务模块保持纯 Android 模块和 iOS 模块,原生和 CMP 要求共用一套加载缓存与资源类型支持。Android 端还是使用 Glide 加载,iOS 侧主要使用 Coil,并预留打通 Kingfisher 缓存或直接接入 Kingfisher 的扩展能力。 虽然可以直接 expect 图片组件,由两端各自实现,但由于类似于 Modifier.asyncBackground 这类需要依赖 ModifierNode 测量和绘制逻辑的场景,expect 方案并无法直接套用原生 View 实现,因此最好的方式还是统一 Compose 节点定义与逻辑,仅抽象出平台加载图片的 engine(类似于 Ktor) 社交业务的图片加载需要支持许多网络图片类型,包括 ninepatch 背景、gif、lottie 动画等,因此也需要在 CMP 侧同样支持这些类型的加载。 从原本的纯 Android Akit 库迁移到 CMP 在早期的 Android 版本里,图片加载主要是围绕 Glide 做 Compose 适配,核心目标是“让业务能在 Compose 里继续复用已有图片能力”,所以当时的重心是 UI 侧封装(例如统一的 NetImage)和加载时机控制。 ...