Skip to content

Instantly share code, notes, and snippets.

@ifucolo
Last active April 17, 2025 09:34
Show Gist options
  • Save ifucolo/26b7a6067a31f0c1c1241ce56c749540 to your computer and use it in GitHub Desktop.
Save ifucolo/26b7a6067a31f0c1c1241ce56c749540 to your computer and use it in GitHub Desktop.
@Composable
fun EmptyStateScreen(
modifier: Modifier = Modifier,
title: String,
subtitle: String? = null,
searchQuery: String = "",
actionText: String? = null,
onActionClick: (() -> Unit)? = null,
contentPadding: PaddingValues = PaddingValues(SanctusDimensions.paddingMedium),
icon: @Composable (() -> Unit)? = null
) {
val context = LocalContext.current
Column(
modifier = modifier
.fillMaxSize()
.padding(contentPadding),
verticalArrangement = Arrangement.Center,
horizontalAlignment = Alignment.CenterHorizontally
) {
icon?.invoke()
TitleLargeText(
modifier = Modifier.padding(top = SanctusDimensions.paddingMedium),
text = title,
textAlign = TextAlign.Center
)
subtitle?.let {
BodyMediumText(
modifier = Modifier.padding(top = SanctusDimensions.paddingSmall),
text = subtitle,
textAlign = TextAlign.Center
)
}
if (searchQuery.isNotEmpty()) {
BodyMediumText(
modifier = Modifier.padding(top = SanctusDimensions.paddingMedium),
text = context.getString(R.string.search_query_text, searchQuery),
textAlign = TextAlign.Center,
color = MaterialTheme.colorScheme.onSurfaceVariant
)
}
if (actionText != null && onActionClick != null) {
SanctusPrimaryButton(
modifier = Modifier.padding(top = SanctusDimensions.paddingLarge),
text = actionText,
onClick = onActionClick
)
}
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment