Modal bottom sheets are used as an alternative to inline menus or simple dialogs on mobile, especially when offering a long list of action items, or when items require longer descriptions and icons.
ManualModalBottomSheetSample
@OptIn(ExperimentalMaterial3Api::class)
@Preview
@Composable
fun ManualModalBottomSheetSample() {
var showSheet by remember { mutableStateOf(false) }
Box(modifier = Modifier.fillMaxSize(), contentAlignment = Alignment.Center) {
Button(onClick = { showSheet = true }) { Text("Show Manual Sheet") }
}
val sheetState = rememberModalBottomSheetState()
if (showSheet) {
Scrim("scrim", onClick = { showSheet = false })
BottomSheet(
modifier = Modifier,
state = sheetState,
onDismissRequest = { showSheet = false },
) {
LazyColumn {
items(25) {
ListItem(
headlineContent = { Text("Item $it") },
leadingContent = {
Icon(
Icons.Default.Favorite,
contentDescription = "Localized description",
)
},
colors =
ListItemDefaults.colors(
containerColor = MaterialTheme.colorScheme.surfaceContainerLow
),
)
}
}
}
}
// Handle sheet animations
LaunchedEffect(showSheet) {
if (showSheet) {
sheetState.show()
} else {
sheetState.hide()
}
}
}