io.coil-kt.coil3:coil-compose:3.1.0
< /code>
Die Profilbild -URL wird aus einer API zurückgegeben und korrekt in der ViewModel angemeldet.https://example.com/img/icon_user.png< /code> ← png über https < /p>
Es ist ein statisches Platzhalterbild, das als Standardprofilsymbol verwendet wird, und lädt in einem Browser einwandfrei. Browser < /li>
Die URL -Updates über StateFlow < /code> und komponieren Die Neuverdichtung tritt auf < /li>
Es werden keine Fehler ausgeworfen. /> ViewModel < /h3>
class UserViewModel : ViewModel() {
private val _imageUrl = MutableStateFlow("")
val imageUrl: StateFlow = _imageUrl
fun loadUserProfile() {
viewModelScope.launch {
userProfileUseCase.execute().collect {
if (it is RequestState.Success) {
val body = it.response.result.body
val url = body.imageUrl
Log.d("UserViewModel", "imageUrl = $url") //
_imageUrl.emit(url ?: "")
}
}
}
}
}
< /code>
komponierbare Verwendung < /h3>
@Composable
fun UserProfileScreen(userViewModel: UserViewModel) {
val imageUrl by userViewModel.imageUrl.collectAsStateWithLifecycle()
UserImageThumbnail(
imageUrl = imageUrl,
onClick = { /* omitted */ }
)
}
< /code>
Bildanzeige komponierbar < /h3>
@Composable
fun UserImageThumbnail(imageUrl: String?, onClick: () -> Unit) {
val context = LocalContext.current
Box(
modifier = Modifier
.size(107.dp)
.clickable { onClick() }
) {
if (!imageUrl.isNullOrBlank()) {
Image(
painter = rememberAsyncImagePainter(
ImageRequest.Builder(context)
.data(imageUrl)
.memoryCachePolicy(CachePolicy.DISABLED)
.diskCachePolicy(CachePolicy.DISABLED)
.build()
),
contentDescription = null,
modifier = Modifier.fillMaxSize(),
contentScale = ContentScale.Crop
)
}
Icon(
painter = painterResource(id = R.drawable.icon_camera),
contentDescription = null,
modifier = Modifier
.align(Alignment.Center)
.size(48.dp)
)
}
}
< /code>
Warum ist Coil 3 nicht eine gültige Bild -URL in Jetpack komponiert, obwohl die URL korrekt ist und die Wiederbelebung komponiert? Dies umfasst sowohl benutzerbezogene Profilbilder als auch Standard-Fallback-Bilder, die immer von der API bereitgestellt werden. Die URL ist also niemals null oder leer. Das Bild wird jedoch nicht angezeigt. Trotzdem wird in Komponsen nichts gezeigt.