Изображение профиля возвращается из API и правильно зарегистрировано в ViewModel.
Код: Выделить всё
https://example.com/img/icon_user.png< /code> ← PNG над https < /p>
Это статическое изображение заполнителя, используемое в качестве значка профиля по умолчанию, и он хорошо загружается в браузере. browser
[*]The URL updates correctly via StateFlow
[*]No errors are thrown
[*]Glide handled the same URL fine in the legacy implementation
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>
@Composable
fun UserProfileScreen(userViewModel: UserViewModel) {
val imageUrl by userViewModel.imageUrl.collectAsStateWithLifecycle()
UserImageThumbnail(
imageUrl = imageUrl,
onClick = { /* omitted */ }
)
}
< /code>
@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>
Почему катушка 3 не отображает действительный URL -адрес в Compose, даже несмотря на то, что URL является правильным и сочетает в себе? Это включает в себя как пользовательские изображения профиля, так и резервные изображения по умолчанию, которые всегда предоставляются API. Таким образом, URL никогда не бывает нулевым или пустым. < /P>
Я подтвердил в журналах, что URL -адрес является действительным и сочиняется, как и ожидалось. Но изображение не отображается. < /P>
Я попытался отключить как память, так и дисковый кэш с катушкой 3, а также проверил, что один и тот же URL -адрес успешно загружается в Glide и в браузере. Тем не менее, ничего не показано в составе.
Подробнее здесь: https://stackoverflow.com/questions/796 ... mpose-even