Jetpack Compose Bottom Sheet With Empty Sheet Content(JetPack排版底纸内容为空页内容)始终被删除

djp7away  于 2022-09-21  发布在  Android
关注(0)|答案(2)|浏览(153)

我正在尝试通过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.

fzwojiic

fzwojiic1#

虽然sheetContent对于BottomSheetScaffold是必需的,但是却无法处理空值,因为句柄滑动的BottomSheetState类需要锚点来获取高度,而空值会导致意外的结果

zzlelutf

zzlelutf2#

这是Compose 1.2.x的最新版本中引入的错误。为了在开始时停止显示底部的工作表,我只在数据不为空的情况下添加SheetContent(这在以前的1.1.x版本中是不可能的)。现在我有了另一个问题。展开BottomSheet的Click事件不会在第一次尝试时触发。我总是需要点击两次。

相关问题