Saltearse al contenido

Bottom Sheet

MaterialMaterial 3
Imagen del componente BottomSheet - MaterialImagen del componente BottomSheet - Material 3

El BottomSheet es un componente que se desliza desde la parte inferior de la pantalla para mostrar contenido adicional. Es útil para presentar opciones, información adicional o controles que están relacionados con la interfaz principal pero que no necesitan estar visibles todo el tiempo.

Implementación

Definición del componente

Terminal window
@Composable
@ExperimentalMaterialApi
fun ModalBottomSheetLayout(
sheetContent: @Composable ColumnScope.() -> Unit,
modifier: Modifier = Modifier,
sheetState: ModalBottomSheetState =
rememberModalBottomSheetState(Hidden),
sheetShape: Shape = MaterialTheme.shapes.large,
sheetElevation: Dp = ModalBottomSheetDefaults.Elevation,
sheetBackgroundColor: Color = MaterialTheme.colors.surface,
sheetContentColor: Color = contentColorFor(sheetBackgroundColor),
scrimColor: Color = ModalBottomSheetDefaults.scrimColor,
content: @Composable () -> Unit
)
AtributoDescripción
sheetContentEl contenido del bottom sheet.
modifierModificador opcional para todo el componente.
sheetStateEl estado del bottom sheet.
sheetShapeLa forma del bottom sheet.
sheetElevationLa elevación del bottom sheet.
sheetBackgroundColorEl color de fondo del bottom sheet.
sheetContentColorEl color de contenido preferido proporcionado por el bottom sheet a sus hijos. Por defecto, es el color de contenido que coincide con sheetBackgroundColor, o si no es un color del tema, mantendrá el mismo color de contenido establecido sobre el bottom sheet.
scrimColorEl color del velo que se aplica al resto de la pantalla cuando el bottom sheet es visible. Si el color pasado es Color.Unspecified, entonces no se aplicará un velo y el bottom sheet no bloqueará la interacción con el resto de la pantalla cuando sea visible.
contentEl contenido del resto de la pantalla.

Ejemplos

Imagen del componente BottomSheet - Material
Terminal window
@Composable
@OptIn(ExperimentalMaterialApi::class)
fun ModalBottomSheetMaterialSample() {
val state = rememberModalBottomSheetState(ModalBottomSheetValue.Hidden)
val scope = rememberCoroutineScope()
ModalBottomSheetLayout(
sheetState = state,
sheetContent = {
LazyColumn {
items(50) {
ListItem(
text = { Text("Item $it") },
icon = {
Icon(
Icons.Default.Favorite,
contentDescription = "Localized description"
)
}
)
}
}
}
) {
Column(
modifier = Modifier
.fillMaxSize()
.padding(16.dp),
horizontalAlignment = Alignment.CenterHorizontally
) {
Text("Bottom Sheet Sample Material")
Spacer(Modifier.height(20.dp))
Button(onClick = { scope.launch { state.show() } }) {
Text("Click to show sheet")
}
}
}
}