Don*_*dal 6 bottom-sheet material-components-android android-jetpack-compose
在 Jetpack Compose 中,我有BottomSheetScaffold
一些内容。该内容是从 ViewModel 中观察到的,如下所示:
BottomSheetScaffold(
sheetContent = { SheetContent(sheetData = viewModel.sheetData) }
) {}
Run Code Online (Sandbox Code Playgroud)
因此,每当viewModel.sheetData
发生变化时,就会触发重组。每当发生这种情况时,底部工作表就会自动展开。这是一个错误还是一个功能?我可以禁用这个吗?我使用的是最新版本:1.1.0-alpha01
LaunchedEffect
编辑:这是一个使用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) {}
}
Run Code Online (Sandbox Code Playgroud)
包含 5 个文本的工作表会自动展开。
这似乎是一个错误。
目前(1.0.x
和1.1.0-alpha01
)当sheetContentHeight
<时就会发生这种情况sheetPeekHeight
。
在这种情况下,如果不显示内容表,scaffoldState.bottomSheetState
结果也是如此。expanded
您可以在代码中轻松验证它:
sheetBackgroundColor = if (scaffoldState.bottomSheetState.isCollapsed) Color.LightGray else Color.Yellow
Run Code Online (Sandbox Code Playgroud)
当addSheetData == false
背景颜色变成Yellow
. 当您重新组合可组合项时,由于状态已展开,因此内容表将完全展开。
作为解决方法,您可以使用类似以下内容的方法:
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)
}
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
4502 次 |
最近记录: |