Заголовок не будет сворачивать диалоговое окно в JetPack Compose BottomSheetDialog с RememberNestedScrollInteropConnection
У меня есть фрагмент BottomDialog, который состоит только из Composable (Row (title) и LazyColumn). Первая проблема, с которой я столкнулся, заключалась в том, что когда вы прокручиваете список вниз, а затем пытаетесь прокрутить список вверх, список не прокручивается, и диалоговое окно начинает сворачиваться. Это решается с
modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection())
Но теперь пользователь не может свернуть диалоговое окно, когда пытается сделать это, коснувшись заголовка. И вот мой вопрос, как это решить?
Минимальный воспроизводимый код
Во время создания этого примера я обнаружил, что могу развернуть диалоговое окно при касании заголовка, также я могу начать перемещать действие пальцем вверх (чтобы начать расширять его), а затем переместить палец в нижнюю часть экрана, в таким образом, диалоговое окно будет закрыто, но все же не сможет свернуть его простым способом.
ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
Theme {
Column(modifier = Modifier.nestedScroll(rememberNestedScrollInteropConnection())) {
Row {
Text(
modifier = Modifier
.padding(16.dp)
.fillMaxWidth(),
text = "Title"
)
}
LazyColumn(
Modifier
.weight(1f)
.fillMaxWidth()
) {
items(100) {
Text(
text = "Item $it",
modifier = Modifier
.padding(16.dp)
.fillMaxWidth(),
)
}
}
}
}
}
}
Пожалуйста, не предлагайте BottomSheetScaffold. Потому что я хочу создать стандартный нижний диалог. И чтобы использовать его, мне нужно будет просто передать список элементов и функцию Compose для одного элемента. IMO BottomSheetScaffold вообще не должен быть выпущен, потому что он был разработан «не очень хорошо». Просто представьте, что раньше, перед Jetpack Compose, вы пишете свой код вокруг нижнего диалогового окна, хорошее наслоение. Нет.
2 ответа
В документации упоминается:
Чтобы решить эту проблему, убедитесь, что вы также установили прокручиваемые модификаторы для этих типов вложенных составных объектов.
modifier = Modifier.verticalScroll(rememberScrollState())
Размещение этого в заголовке исправит это.
Как временное решение. Я просто думаю, что LazyColumn работает правильно, поэтому мне нужно обернуть заголовок в LazyColumn.
Поэтому я создал эту функцию. И просто передайте сюда любой Composable
@Composable
fun TrickyLazyColumn(content: @Composable () -> Unit) {
LazyColumn {
items(
items = listOf(1),
itemContent = {
content.invoke()
})
}
}