我正在使用Jetpack Compose 1.0.0开发一个Android应用程序,我试图创建一个可为空的图像URL字符串的组合项,如果为空,它将使用
我之前的做法是:
但是这不起作用,因为
painterResource
显示占位符,如果不为空,则使用rememberImagePainter
显示实际图像。我之前的做法是:
@Composable
fun VariableImagePainterExample (
imageURL: String?
) {
val painter = rememberCoilPainter(
null,
previewPlaceholder = R.drawable.ic_placeholder_user,
fadeIn = true,
)
LaunchedEffect(imageURL) {
painter.request = imageURL
}
Image(painter = painter, contentDescription = null)
}
遗憾的是,rememberCoilPainter
已经被废弃了,现在建议使用rememberImagePainter
。然而,ImagePainter.request
无法像上面那样更改。我接着尝试了以下代码:
@Composable
fun VariableImagePainterExample (
imageURL: String?
) {
val painter = remember {
mutableStateOf<ImagePainter>(painterResource(id = R.drawable.ic_placeholder_user))
}
LaunchedEffect(imageURL) {
painter.value = rememberImagePainter(imageURL)
}
Image(painter = painter.value, contentDescription = null)
}
但是这不起作用,因为
painterResource
和 rememberImagePainter
必须在@Composable
函数上使用。我如何实现与之前相同的效果?
imageURL
可为空,因此在第一次组合时,该值将为 null,直到完成 http 请求,然后 URL 将成为字符串。我使用LaunchedEffect
检查imageURL
值何时更改,如果更改,则将 painter 替换为具有当前图像 URL 的 painter。 - Matheus DiasimageURL
与上次合成时不同,图像视图将丢弃旧的并开始下载新的。而且,null
也可以被传递给rememberImagePainter
,没有问题,它只是一个空视图。此外,您还可以检查painter.state
以查看当前状态。 - Phil DukhovrememberImagePainter
将从第一个参数开始是静态的,但非常感谢! - Matheus Dias