Jetpack Compose 上的可变 ImagePainter

Variable ImagePainter on Jetpack Compose

我正在使用 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)
}

但这不起作用,因为 painterResourcerememberImagePainter 必须用在 @Composable 函数上。我怎样才能达到和以前一样的效果?

在 Coil 2.0.0 中,AsyncImagerememberAsyncImagePainter 都有 placeholder 接受任何其他画家的参数:

AsyncImage(
    model = imageURL,
    placeholder = painterResource(R.drawable.placeholder),
    contentDescription = null,
)

在 Coil 1.4.0 中,您可以像这样使用 builder

Image(
    rememberImagePainter(
        imageURL,
        builder = {
            placeholder(R.drawable.placeholder)
        }
    ),
    contentDescription = null,
)