Jetpack Compose BottomSheetScaffoldsheetGestures已禁用,但当子组件可滚动时手势仍然有效

J. *_*egg 6 android kotlin bottom-sheet android-jetpack-compose lazycolumn

我的 Android 应用程序内部有一个BottomSheetScaffold如下所示的内容:

 BottomSheetScaffold(
        sheetGesturesEnabled = false,
        sheetContent = { MyContent() },
        scaffoldState = bottomSheetScaffoldState,
    ) {
        ..
    }
Run Code Online (Sandbox Code Playgroud)

设置为sheetGesturesEnabledfalse,工作表不应可滑动。但是,如果MyContent()包含像 之类的可滚动组件LazyColumn,则仍然可以在模态底部表单上执行滑动关闭手势。

这怎么可能?这是一个已知的错误吗?有什么解决办法吗?

小智 2

看起来这是一个已知的错误,可以在此处跟踪 -> https://issuetracker.google.com/issues/215403277

我也遇到了这个问题,需要同时找到解决方案,所以我最终将sheetPeekHeight 设置为我的LazyColumn 的高度。请注意,我并不为此感到自豪。

  BottomSheetScaffold(
        scaffoldState = sheetState,
        sheetGesturesEnabled = false,
        sheetPeekHeight = if(isFixedHeight) 500.dp else BottomSheetScaffoldDefaults.SheetPeekHeight,
        sheetContent = {

           LazyColumn(
               state = listState,
               userScrollEnabled = true,
                modifier = Modifier
                .heightIn(max = 500.dp)
                ) { //items }
           }
         
Run Code Online (Sandbox Code Playgroud)

在我的实现中,我有条件地设置了sheetPeekHeight,因为只有在某些情况下它才需要是静态的,而在其他情况下则不需要。

它不漂亮,但很有效。我确信存在其他解决方法,但这个最适合我的用例。一旦发布了错误修复程序,请务必添加 TODO 来修复它。