如何在 compose modalBottomSheet 中启用垂直滚动并禁用 BottomSheet 关闭的事件?

问题描述 投票:0回答:1
    val sheetState = rememberModalBottomSheetState(
        skipPartiallyExpanded = true,
        confirmValueChange = {
            true
        }
    )

    ModalBottomSheet(
        sheetState = sheetState,
        content = {
            Box(
                modifier = Modifier
                    .fillMaxSize()
                    .verticalScroll(rememberScrollState())
                    .padding(10.dp)
            ) {
                content()
            }
        }
    )

代码如下编写是可以实现垂直滚动的,但是滚动到底部时存在底部sheet关闭的问题

如何确保底部工作表不会关闭并允许垂直滚动? 阻止拖动事件本身不会将底部工作表关闭到底部滚动,但您也无法垂直滚动。 我没有找到办法做到这一点。

android kotlin android-jetpack-compose bottom-sheet vertical-scrolling
1个回答
0
投票

您可以考虑使用

BottomSheetScaffold
。它提供了一个名为
sheetSwipeEnabled
的参数,您可以在其中设置是否可以通过滑动来展开或折叠 BottomSheet。此属性似乎不适用于
ModalBottomSheet

您可以尝试以下代码:

val scaffoldState = rememberBottomSheetScaffoldState()
val scrolLState = rememberScrollState()

val endReached by remember {
    derivedStateOf {
        scrollState.value == scrollState.maxValue
    }
}

BottomSheetScaffold(
    scaffoldState = scaffoldState,
    sheetPeekHeight = 128.dp,
    sheetSwipeEnabled = !scaffoldState.bottomSheetState.hasExpandedState || endReached,
    sheetContent = {
        Box(
            Modifier.fillMaxWidth().height(128.dp),
            contentAlignment = Alignment.Center
        ) {
            Text("Swipe up to expand sheet")
        }
        Box(
            modifier = Modifier
                .fillMaxSize()
                .verticalScroll(scrollState)
                .padding(10.dp)
        ) {
            content()
        }
    }
) { innerPadding ->
    // some Scaffold content
}

这应该会导致以下行为:

  • 只要 BottomSheet 完全展开,关闭 BottomSheet 的滑动事件就会被忽略。
  • 当 BottomSheet 展开时,只有当您滚动到嵌套可滚动列表的末尾时,才会启用用于关闭 BottomSheet 的滑动操作。

请报告是否有效,因为我现在无法测试该方法。

© www.soinside.com 2019 - 2024. All rights reserved.