使用 Compose Coil 检测何时找不到图像

Detect when image not found using Compose Coil

我在 jetpack compose 中使用 coil 填充我的图像,我面临的问题是我无法以编程方式确定 url 是否不再有效。

val imageUrl = "www.someinvalidurl.com"
val painter = rememberImagePainter(
    data = imageUrl
)

Image(
    painter = painter
)

url 以前有效,但不再有效。 Coil 显示默认占位符 url,但我想识别此故障并尝试从不同的 url 获取图像。这个我试过了,

if (painter.state is ImagePainter.State.Error) {
    //failed so try to get an image from a different url
}

但问题在于,即使 urls 有效,也会调用此块。

我正在使用以下版本的线圈:

implementation("io.coil-kt:coil-compose:1.4.0")

在使用 jetpack compose 时,是否有不同的正确方法来识别 coil 中的无效 URL

添加一个检查异常的侦听器。在此示例中,文件扩展名应为“jpg”,但我删除了“g”以测试图像不存在:

class MainActivity : ComponentActivity() {
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        startActivity(intent)

        setContent {
            val imageUrl = "https://upload.wikimedia.org/wikipedia/commons/thumb/3/3a/Cat03.jpg/1200px-Cat03.jp"
            val painter = rememberImagePainter(
                data = imageUrl,
                builder = {
                    this.listener(
                        onError = {request, ex ->
                            if ((ex as HttpException).response.code() == 400) {
                                // Image not found
                            }
                        }
                    )
                }
            )

            Image(
                painter = painter,
                contentDescription = null
            )
        }
    }
}