Saltearse al contenido

Snackbar

MaterialMaterial3
Snackbar material2Snackbar ,3

El componente de Snackbar funciona como una breve notificación que se muestra en la parte inferior de la pantalla. Proporciona comentarios sobre una operación o acción sin interrumpir la experiencia del usuario.

Los Snackbars desaparecen después de unos segundos. El usuario también puede descartarlo con una acción, como presionar un botón.

Implementación

Definición del componente

Terminal window
@Composable
fun Snackbar(
modifier: Modifier,
action: @Composable() (() -> Unit)
actionOnNewLine: Boolean,
shape: Shape,
backgroundColor: Color,
contentColor: Color,
elevation: Dp,
content: @Composable () -> Unit
)
ParametroDescripción
modifierModificador que implementará el composable.
actionComponente de acción/botón para agregar como acción al Snackbar. Considere usar SnackbarDefaults.
actionOnNewLineSi la acción debe colocarse o no en una línea separada. Recomendado para acciones con texto de acción largo.
shapeDefine la forma del Snackbar así como su sombra.
backgroundColorColor de fondo del Snackbar.
contentColorColor del contenido que se utilizará dentro del Snackbar.
elevationLa coordenada “z” en la que colocar el SnackBar. Esto controla el tamaño de la sombra debajo del SnackBar.
contentContenido para mostrar información sobre un proceso que una aplicación ha realizado o realizará.

Ejemplos

Genérico

InicioResultado
Snackbar default m2Snackbar default m2

Esta versión del Snackbar está diseñada para trabajar con el SnackbarData provista por el SnackbarHost, el cual normalmente es usado dentro del Scaffold.

Este componente provee solo la visualización del Snackbar. Si necesitas mostrar el Snackbar genérico en la pantalla, usa ScaffoldState.snackbarHostState y SnackbarHostState.showSnackbar:

Terminal window
@Composable
fun MySnackbar() {
val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
Scaffold(
snackbarHost = {
SnackbarHost(hostState = snackbarHostState)
},
floatingActionButton = {
ExtendedFloatingActionButton(
text = { Text("Mostrar Snackbar") },
icon = { Icon(Icons.Filled.Add, contentDescription = "") },
onClick = {
scope.launch {
snackbarHostState.showSnackbar(
"Esto es un Snackbar",
actionLabel = "Acción",
duration = SnackbarDuration.Indefinite
)
}
}
)
}
) { contentPadding -> // show content
}
}

Snackbar Personalizado

InicioResultado
Snackbar custom m2Snackbar custom m2

Si quieres personalizar la apariencia del Snackbar, puedes pasar tu propia versión como un componente hijo del SnackbarHost al Scaffold.

Terminal window
@Composable
fun CustomSnackbar() {
Snackbar(
elevation = 0.dp,
backgroundColor = Color.Transparent
) {
Box(
modifier = Modifier
.fillMaxSize()
.wrapContentHeight()
) {
Column(
modifier = Modifier
.padding(top = 16.dp)
.fillMaxWidth()
.clip(RoundedCornerShape(10.dp))
.background(
Brush.verticalGradient(
colors = listOf(
Color(color = android.graphics.Color.parseColor("#f4b07d")),
Color(color = android.graphics.Color.parseColor("#91301b"))
)
)
)
.padding(start = 95.dp, top = 8.dp, bottom = 12.dp, end = 8.dp),
horizontalAlignment = Alignment.Start
) {
Text(
text = "Titulo de Snackbar",
color = Color.White,
fontWeight = FontWeight.Bold,
fontSize = 20.sp
)
Spacer(modifier = Modifier.padding(vertical = 4.dp))
Text(
text = "Contenido del Snackbar",
color = Color.White,
fontWeight = FontWeight.SemiBold,
fontSize = 15.sp
)
}
Column(
modifier = Modifier.padding(start = 16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Card(
elevation = 6.dp,
shape = RoundedCornerShape(8.dp)
) {
Button(
onClick = { /*TODO*/ },
shape = RoundedCornerShape(50)
) {
Text("Boton")
}
}
}
}
}
}
@Composable
fun MyCustomSnackbar() {
val context = LocalContext.current
val snackbarState = remember { SnackbarHostState() }
val scope = rememberCoroutineScope()
Surface(
color = Color.DarkGray,
modifier = Modifier.fillMaxSize()
) {
Box(
modifier = Modifier.fillMaxSize()
) {
Button(
modifier = Modifier.align(Alignment.Center),
onClick = {
scope.launch {
snackbarState.showSnackbar("")
}
},
colors = ButtonDefaults.buttonColors(
backgroundColor = Color.White,
contentColor = Color.Black
)
) {
Text(text = "Mostrar Snackbar personalizada", fontSize = 16.sp)
}
SnackbarHost(
modifier = Modifier.align(Alignment.BottomCenter),
hostState = snackbarState
) {
CustomSnackbar()
}
}
}
}