In Jetpack Compose, I have a BottomSheetScaffold
with some content. This content is observed from the ViewModel, like this:
BottomSheetScaffold(
sheetContent = { SheetContent(sheetData = viewModel.sheetData) }
) {}
So whenever viewModel.sheetData
changes, a recomposition is triggered. Whenever this happens, the bottom sheet automatically expands. Is this a bug or a feature? Can I disable this? I am using the newest version: 1.1.0-alpha01
Edit: Here is an example using LaunchedEffect
instead of a ViewModel.
@OptIn(ExperimentalMaterialApi::class)
@Preview
@Composable
fun HomeScreen() {
var addSheetData by remember { mutableStateOf(false) }
LaunchedEffect(true) {
delay(2000)
addSheetData = true
}
BottomSheetScaffold(sheetContent = {
if (addSheetData) {
Column {
Text(text = "Text1", fontSize = 36.sp)
Text(text = "Text2", fontSize = 36.sp)
Text(text = "Text3", fontSize = 36.sp)
Text(text = "Text4", fontSize = 36.sp)
Text(text = "Text5", fontSize = 36.sp)
}
}
}, sheetBackgroundColor = Color.LightGray) {}
}
The sheet with the 5 texts expands automatically.
It seems a bug.
Currently (1.0.x
and 1.1.0-alpha01
) it happens when the sheetContentHeight
< sheetPeekHeight
.
In this case the scaffoldState.bottomSheetState
result expanded
also if the content sheet is not displayed.
You can easily verify it using in your code:
sheetBackgroundColor = if (scaffoldState.bottomSheetState.isCollapsed) Color.LightGray else Color.Yellow
When addSheetData == false
the background color becomes Yellow
. When you recompose the composable, since the state is expanded, the content sheet is full expanded.
As workaround you can use something like:
sheetContent = {
if (!addSheetData){
Box(Modifier.fillMaxWidth().height(60.dp))
}
if (addSheetData) {
Column {
Text(text = "Text1", fontSize = 36.sp)
Text(text = "Text2", fontSize = 36.sp)
Text(text = "Text3", fontSize = 36.sp)
Text(text = "Text4", fontSize = 36.sp)
Text(text = "Text5", fontSize = 36.sp)
}
}
}