fixup! ref: add MXCImage

This commit is contained in:
2025-06-05 21:51:04 +03:00
parent de205b739f
commit c40b13a7ea
@@ -5,7 +5,6 @@
package ru.risdeveau.pixeldragon.ui.item package ru.risdeveau.pixeldragon.ui.item
import android.annotation.SuppressLint
import androidx.compose.foundation.Image import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxSize
@@ -28,20 +27,18 @@ import ru.risdeveau.pixeldragon.api.mxcToUrl
import ru.risdeveau.pixeldragon.token import ru.risdeveau.pixeldragon.token
import splitties.init.appCtx import splitties.init.appCtx
@SuppressLint("StateFlowValueCalledInComposition")
enum class ImageLoadState {
Loading, Success, Error
}
@Composable @Composable
fun MXCImage( fun MXCImage(
mxcUrl: String, mxcUrl: String,
modifier: Modifier = Modifier, modifier: Modifier = Modifier,
contentDescription: String = "" contentDescription: String = ""
) { ) {
data class ImageLoadState( val loadState = remember { mutableStateOf(ImageLoadState.Loading) }
val isLoading: Boolean = false,
val isSuccess: Boolean = false,
val error: Throwable? = null
)
val loadState = remember { mutableStateOf(ImageLoadState()) }
val painter = rememberAsyncImagePainter( val painter = rememberAsyncImagePainter(
model = ImageRequest.Builder(appCtx) model = ImageRequest.Builder(appCtx)
.data(mxcToUrl(mxcUrl)) .data(mxcToUrl(mxcUrl))
@@ -54,10 +51,9 @@ fun MXCImage(
.build(), .build(),
onState = { state -> onState = { state ->
loadState.value = when (state) { loadState.value = when (state) {
is AsyncImagePainter.State.Loading -> ImageLoadState(isLoading = true) is AsyncImagePainter.State.Loading -> ImageLoadState.Loading
is AsyncImagePainter.State.Success -> ImageLoadState(isSuccess = true) is AsyncImagePainter.State.Success -> ImageLoadState.Success
is AsyncImagePainter.State.Error -> ImageLoadState(error = state.result.throwable) else -> ImageLoadState.Error
else -> ImageLoadState()
} }
} }
) )
@@ -73,10 +69,10 @@ fun MXCImage(
modifier = Modifier.fillMaxSize() modifier = Modifier.fillMaxSize()
) )
if (loadState.value.isLoading) { when (loadState.value) {
CircularProgressIndicator() ImageLoadState.Loading -> CircularProgressIndicator()
} else if (loadState.value.error != null) { ImageLoadState.Error -> Icon(Icons.Outlined.Warning, "Error")
Icon(Icons.Outlined.Warning, "Error") ImageLoadState.Success -> Unit
} }
} }
} }