Код: Выделить всё
@OptIn(ExperimentalMaterial3Api::class, ExperimentalGlideComposeApi::class)
@Composable
fun ProfileScreen(
navigate: (String) -> Unit,
viewModel: ProfileViewModel = hiltViewModel()
) {
// code
val result by viewModel.profilePicUrl.collectAsState()
// code
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
GlideImage(
model = result,
contentDescription = null,
modifier = Modifier
.size(170.dp, 170.dp)
.clip(CircleShape)
.clickable {
showBottomSheet = true
},
) { image ->
image
.fitCenter()
.circleCrop()
.diskCacheStrategy(DiskCacheStrategy.ALL)
.placeholder(R.drawable.profilepic)
}
// button
}
// some more code
}
Код: Выделить всё
@HiltViewModel
class ProfileViewModel @Inject constructor(
// dependencies
) : ViewModel() {
private val _profilePicUrl = MutableStateFlow("")
val profilePicUrl: StateFlow = _profilePicUrl
init {
viewModelScope.launch {
_profilePicUrl.value = getUserData("profileImage").toString()
}
}
fun updateProfilePic(bitmap: Bitmap) {
viewModelScope.launch {
uploadImageToFirebase(bitmap)
}
}
private suspend fun getUserData(fieldName: String): Any? {
return withContext(Dispatchers.IO) {
try {
userRepository.getCurrentUserData(fieldName)
} catch (_: Exception) {
null
}
}
}
private suspend fun saveUserData(fieldName: String, data: Any): Boolean {
return userRepository.saveUserData(fieldName, data)
}
private suspend fun uploadImageToFirebase(imageUri: Bitmap) {
userRepository.uploadImageToFirebaseStorage(imageUri)
_profilePicUrl.emit(getUserData("profileImage").toString())
}
fun removeProfilePicture() {
// code
}
private fun getRandomDefaultImage(): String {
val randomImages = arrayOf(
// 2 links
)
return randomImages.random()
}
}
Код: Выделить всё
@HiltAndroidApp
class MelonFeedApp : Application() {
override fun onCreate() {
super.onCreate()
Glide.with(this)
.applyDefaultRequestOptions(RequestOptions().diskCacheStrategy(DiskCacheStrategy.ALL))
}
}
Здесь я хочу, чтобы, когда у пользователя нет Интернета, его изображение профиля также загружалось в приложение из кеша. Для кеширования я использую Glide, но он работает не так, как ожидалось. Изображение не загружается при отсутствии интернета. Изображение загружается, если есть Интернет.
Возможно, проблема в том, что при отсутствии Интернета приложение пытается получить изображение из базы данных, но не может его получить, поэтому значение _profilePicUrl остается пустым, поэтому я получаю предупреждение
Не удалось загрузить [] с размерами [468x468]
класс com.bumptech .glide.load.engine.GlideException: не удалось загрузить ресурс
Подробнее здесь: https://stackoverflow.com/questions/784 ... ck-compose
Мобильная версия