android - 如何在 Jetpack Compose 中将图像 URL 设置为线圈上的错误占位符
问题描述
Coil 接受可绘制资源作为错误占位符。有没有办法在这里使用图像 URL?
这是我正在处理的代码:
// Global variables
var currentlySelectedImageUri = mutableStateOf<Uri?>(null)
var previousImageUri: Uri? = null
// @Composable fun() {...
Image(
painter = rememberImagePainter(
if (currentlySelectedImageUri.value != null) { // use the currently selected image
currentlySelectedImageUri.value
} else {
if (previousImageUri != null) { // use the previously selected image
previousImageUri
} else {
R.drawable.blank_profile_picture // use the placeholder image
}
}, builder = {
placeholder(R.drawable.blank_profile_picture)
error(R.drawable.blank_profile_picture) // FIXME: Set the previously selected image
}),
contentDescription = "profile image",
contentScale = ContentScale.Crop,
modifier = Modifier.fillMaxWidth()
)
解决方案
您可以检查painter.state
值。
最初它是ImagePainter.State.Empty
,而图像正在加载它ImagePainter.State.Loading
,如果它失败 - 它变成ImagePainter.State.Error
. 此时您可以更改线圈 url,例如,使用本地记忆变量:
val localImagePainterUrl = remember { mutableStateOf<Uri?>(null) }
val painter = rememberImagePainter(
data = localImagePainterUrl.value
?: currentlySelectedImageUri.value
?: previousImageUri
?: R.drawable.blank_profile_picture,
builder = {
placeholder(R.drawable.blank_profile_picture)
})
val isError = painter.state is ImagePainter.State.Error
LaunchedEffect(isError) {
if (isError) {
localImagePainterUrl.value = previousImageUri
}
}
Image(
painter = painter,
...
)
推荐阅读
- itk - 使用 itk 将 3D 二值图像转换为 3D 网格
- r - 按变量的连续运行对数据进行分组
- cordova - Hammer.js 滑动不适用于 Cordova InAppBrowser
- r - 基于线斜率的线颜色
- azure-cognitive-search - 使用 Lucene 查询语法的 Azure 搜索返回不正确的结果
- vba - 438 对象不支持此属性或方法 vba
- javascript - 如何通过承诺链传递变量
- python - 在 For 循环中从 Windows 批处理文件中的数组访问项目
- javascript - c#方法中的重定向不起作用
- ios - Swift Annotation Pin 的 Calloutbubble 手势