Wrap ErrorView and LoadingView in a box to be able to scale them to fillSize without changing their content size

This commit is contained in:
Wolf-Martell Montwé 2023-09-19 11:41:18 +02:00
parent 16768c8e8d
commit 5b00628fe6
No known key found for this signature in database
GPG key ID: 6D45B21512ACBF72
5 changed files with 72 additions and 55 deletions

View file

@ -61,7 +61,7 @@ fun LazyGridScope.stateItems() {
@Composable
private fun StatefulContentLoadingErrorState() {
val state = remember {
mutableStateOf<ContentLoadingErrorState>(ContentLoadingErrorState.Loading)
mutableStateOf(ContentLoadingErrorState.Loading)
}
ContentLoadingErrorView(

View file

@ -30,7 +30,7 @@ fun ContentLoadingErrorView(
) {
AnimatedContent(
targetState = state,
label = "CleView",
label = "ContentLoadingErrorView",
) { targetState ->
when (targetState) {
ContentLoadingErrorState.Loading -> loading()
@ -41,10 +41,8 @@ fun ContentLoadingErrorView(
}
}
sealed interface ContentLoadingErrorState {
object Loading : ContentLoadingErrorState
object Content : ContentLoadingErrorState
object Error : ContentLoadingErrorState
enum class ContentLoadingErrorState {
Loading, Content, Error
}
@Composable
@ -52,7 +50,7 @@ sealed interface ContentLoadingErrorState {
internal fun ContentLoadingErrorViewPreview() {
PreviewWithThemes {
val state = remember {
mutableStateOf<ContentLoadingErrorState>(ContentLoadingErrorState.Loading)
mutableStateOf(ContentLoadingErrorState.Loading)
}
ContentLoadingErrorView(

View file

@ -1,6 +1,7 @@
package app.k9mail.core.ui.compose.designsystem.molecule
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@ -26,6 +27,13 @@ fun ErrorView(
modifier: Modifier = Modifier,
message: String? = null,
onRetry: () -> Unit = { },
contentAlignment: Alignment = Alignment.Center,
) {
Box(
modifier = Modifier
.fillMaxWidth()
.then(modifier),
contentAlignment = contentAlignment,
) {
Column(
modifier = Modifier
@ -33,8 +41,7 @@ fun ErrorView(
.padding(
vertical = MainTheme.spacings.default,
horizontal = MainTheme.spacings.double,
)
.then(modifier),
),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.spacedBy(MainTheme.spacings.default),
) {
@ -72,6 +79,7 @@ fun ErrorView(
}
}
}
}
@Preview(showBackground = true)
@Composable

View file

@ -1,5 +1,7 @@
package app.k9mail.core.ui.compose.designsystem.molecule
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@ -18,6 +20,13 @@ import app.k9mail.core.ui.compose.theme.PreviewWithThemes
fun LoadingView(
modifier: Modifier = Modifier,
message: String? = null,
contentAlignment: Alignment = Alignment.Center,
) {
Box(
modifier = Modifier
.fillMaxWidth()
.then(modifier),
contentAlignment = contentAlignment,
) {
Column(
modifier = Modifier
@ -25,6 +34,7 @@ fun LoadingView(
.padding(MainTheme.spacings.default)
.then(modifier),
horizontalAlignment = Alignment.CenterHorizontally,
verticalArrangement = Arrangement.Center,
) {
if (message != null) {
TextSubtitle1(text = message)
@ -37,6 +47,7 @@ fun LoadingView(
}
}
}
}
@Preview(showBackground = true)
@Composable

View file

@ -46,7 +46,7 @@ internal fun AccountAutoDiscoveryContent(
.then(modifier),
) {
val resources = LocalContext.current.resources
val cleState = remember(key1 = state.isLoading, key2 = state.error) {
val viewState = remember(key1 = state.isLoading, key2 = state.error) {
when {
state.isLoading -> ContentLoadingErrorState.Loading
state.error != null -> ContentLoadingErrorState.Error
@ -55,7 +55,7 @@ internal fun AccountAutoDiscoveryContent(
}
ContentLoadingErrorView(
state = cleState,
state = viewState,
loading = {
LoadingView(
message = stringResource(id = R.string.account_setup_auto_discovery_loading_message),