Не работает скролл наверх в BottomSheetDialogFragment + Compose
Я пытаюсь побороть такое поведение BottomSheetDialogFragment:
- Открываю боттомшит со скроллабельным содержимым
- Скроллю вниз
- Когда я пытаюсь проскроллить снова наверх, вместо скролла наверх боттомшит закрывается
А мне нужно другое поведение - при свайпе наверх должен идти скролл, а уже после того как скроллить будет больше нечего, чтобы закрывался боттомшит. Возможно, тут поможешь что-то типа nested scroll, но не совсем понимаю, как тут подружить компоуз с нативным скроллом BottomSheetDialogFragment
Видео с багом: https://youtube.com/shorts/SO1JafvvgMw?feature=share
Код:
@Composable
fun PrivilegeBottomSheetContent() {
val scrollState = rememberScrollState()
Column(
modifier = Modifier
.verticalScroll(scrollState)
) {
// Elements
}
}
Bottom sheet:
class PrivilegeBottomSheetDialog : BottomSheetDialogFragment() {
override fun onCreateView(
inflater: LayoutInflater,
container: ViewGroup?,
savedInstanceState: Bundle?
): View = ComposeView(requireContext()).apply {
setViewCompositionStrategy(ViewCompositionStrategy.DisposeOnViewTreeLifecycleDestroyed)
setContent {
PrivilegeBottomSheetContent()
}
}
}
Ответы (1 шт):
Автор решения: faritowich
→ Ссылка
Провозился с багом какое-то время, пока не додумался пролистать гугловую документацию в скроллу в компоузе
Получилось как-то так:
@Composable
fun PrivilegeBottomSheetContent() {
val nestedScrollInterop = rememberNestedScrollInteropConnection()
Column(
modifier = Modifier
.nestedScroll(nestedScrollInterop)
) {
// Elements
}
}
А в кастомном BottomSheetDialogFragment использую XML-ный лейаут с ComposeView и NestedScrollView:
<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent">
<androidx.compose.ui.platform.ComposeView
android:id="@+id/composeView"
android:layout_width="match_parent"
android:layout_height="match_parent" />
</androidx.core.widget.NestedScrollView>