Jetpack Compose ModalBottomSheet 始终显示

Oli*_*etz 3 android android-jetpack-compose android-jetpack-compose-material3

似乎ModalBottomSheet默认显示,尽管它实际上应该隐藏(rememberModalBottomSheetState用 an 启动状态initialValue : SheetValue = Hidden)。显然这里缺少一些东西。

val bottomSheetState = rememberModalBottomSheetState()
ModalBottomSheet(
    onDismissRequest = { /*TODO*/ },
    sheetState = bottomSheetState,
    containerColor = Color.White,
) {
    Text(text = "Why am I showing?", color = Color.Black)
}
Run Code Online (Sandbox Code Playgroud)

调用bottomSheetState.hide()似乎也没有任何效果。

使用 Jetpack Compose BOM 2023.06.00,但在 2023.05.01 上获得相同的行为。

小智 5

终于弄清楚了!新的 ModalBottomSheet 有条件地显示,因此类似这样的操作应该有效:

val openBottomSheet = rememberSaveable { mutableStateOf(false) }
val bottomSheetState = rememberModalBottomSheetState()

if (openBottomSheet) {
  ModalBottomSheet(
    onDismissRequest = { openBottomSheet = false },
    sheetState = bottomSheetState,
    containerColor = Color.White,
  ) {
    Text(text = "Why am I showing?", color = Color.Black)
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这真是令人困惑!那么为什么要有“sheetState.show()”和“hide()”呢?我在将 M2 应用程序迁移到 M3 时陷入了这个陷阱。 (5认同)
  • @Abhimanyu 显示和隐藏似乎还不够,因为如果您隐藏它,不可见的背景仍然会捕获所有点击,并且下面的布局将变得无法使用。 (3认同)