我正在尝试通过BottomSheetScaffold
实现modalBottomSheet
以实现一些定制实现。
这是我的BottomSheetScaffold
BottomSheetScaffold(
sheetPeekHeight = 0.dp,
scaffoldState = bottomSheetState,
sheetBackgroundColor = Color.Transparent,
backgroundColor = Color.Transparent,
sheetElevation = 0.dp,
sheetShape = RoundedCornerShape(topStart = 36.dp, topEnd = 36.dp),
snackbarHost = snackBarHost,
sheetContent = { bottomSheet() }) {
Box(Modifier.fillMaxSize()) {
val coroutineScope = rememberCoroutineScope()
sheetContent()
Scrim(
color = Primary,
alpha = bottomSheetState.currentFraction * 0.5f,
onDismiss = {
coroutineScope.launch { bottomSheetState.bottomSheetState.collapse() }
},
visible = bottomSheetState.bottomSheetState.targetValue != BottomSheetValue.Collapsed && bottomSheetState.bottomSheetState.currentValue != BottomSheetValue.Collapsed
)
}
}
当某个屏幕调用此scaffold时,sheetContent()
将被替换为屏幕内容。我这里的问题是,当bottomSheet()
在屏幕上是空的,因此没有高度,底部的工作表状态认为它是扩展的,而我只是没有在bottomSheet()
中放置Composable,它只是根据一些条件填充,没有默认的Composable。因此,Scrim()
函数将是可见的,当我单击它时,将抛出此异常
java.lang.IllegalArgumentException: The target value must have an associated anchor.
2条答案
按热度按时间fzwojiic1#
虽然
sheetContent
对于BottomSheetScaffold是必需的,但是却无法处理空值,因为句柄滑动的BottomSheetState
类需要锚点来获取高度,而空值会导致意外的结果zzlelutf2#
这是Compose 1.2.x的最新版本中引入的错误。为了在开始时停止显示底部的工作表,我只在数据不为空的情况下添加SheetContent(这在以前的1.1.x版本中是不可能的)。现在我有了另一个问题。展开BottomSheet的Click事件不会在第一次尝试时触发。我总是需要点击两次。