Версия библиотеки материалов (M2, M3 или обе?): M3 (androidx.compose.material3:material3:1.5.0-alpha06)
Используемый компонент Material Compose: BottomSheetScaffold, ModalBottomSheet
Сборка Android Studio: Narwhal 4 Feature Drop | 2025.1.4 | #AI-251.27812.49.2514.14217341, создано 6 октября 2025 г.
Версия Kotlin: 2.2.20
Шаги по воспроизведению или образец кода для воспроизведения:
- Настройте проект с androidx.compose.material3:material3 версии 1.4.0 или выше.
- Определите глобальную схему движения в теме приложения, например motionScheme = MotionScheme.standard().
// in core/designsystem/src/main/java/io/eze/apps/charging/core/designsystem/theme/Theme.kt
MaterialTheme(
colorScheme = colorScheme,
typography = typography,
motionScheme = MotionScheme.standard(),
content = content,
) - Реализуйте BottomSheetScaffold и поместите прокручиваемый компонент, например LazyColumn, внутри его содержимого.
- Запустите приложение, разверните нижний лист и попытайтесь прокрутить LazyColumn вверх и вниз. Лист будет казаться слишком чувствительным и будет пытаться свернуться даже при небольших жестах вертикальной прокрутки.
Не применимо.
Описание:
Начиная с версии 1.4.0 библиотеки Material 3, BottomSheetScaffold и ModalBottomSheet использовали жестко закодированную схему выразительного движения, которая игнорирует motionScheme, установленный глобально в MaterialTheme.
Это изменение привело к серьезной ошибке удобства использования с вложенным прокручиваемым содержимым. Когда прокручиваемый компонент, такой как LazyColumn, размещенное внутри BottomSheetScaffold, жестко закодированное выразительное движение делает лист слишком чувствительным к жестам перетаскивания. Незначительные движения, предназначенные для прокрутки списка, часто ошибочно интерпретируются как жест свертывания листа. Это чрезвычайно затрудняет взаимодействие пользователей с содержимым нижнего листа и создает неприятные ощущения.
Основная причина, по-видимому, заключается в жестко запрограммированных спецификациях анимации в исходном коде компонента. Исходный код BottomSheetScaffold.kt для версии 1.5.0-alpha06 содержит комментарий TODO, подтверждающий, что значения не загружаются из схемы движения:
// in androidx.compose.material3.BottomSheetScaffold.kt
// TODO Load the motionScheme tokens from the component tokens file
val anchoredDraggableMotion: FiniteAnimationSpec =
MotionSchemeKeyTokens.DefaultSpatial.value()
val showMotion: FiniteAnimationSpec = MotionSchemeKeyTokens.DefaultSpatial.value()
val hideMotion: FiniteAnimationSpec = MotionSchemeKeyTokens.FastEffects.value()
Это поведение является регрессией по сравнению с версией Material 3 1.3.2 и ниже, где компоненты нижнего листа правильно учитывали схему движения темы, а вложенная прокрутка работала должным образом. Судя по всему, это изменение связано с этим коммитом.
Как разработчику мне нужно иметь возможность контролировать или даже отключать эти анимации на уровне темы. Это необходимо, чтобы исправить критическую ошибку вложенной прокрутки и обеспечить единообразный внешний вид во всем приложении. Текущая реализация требует особого стиля анимации, который нарушает фундаментальное взаимодействие с пользователем.
Библиотеки AndroidX-Compose, которые я использую:
androidxComposeBom = "2025.10.00"
androidxComposeMaterial3 = "1.5.0-alpha06"
androidx-compose-bom = { group = "androidx.compose", name = "compose-bom", version.ref = "androidxComposeBom" }
androidx-compose-foundation = { group = "androidx.compose.foundation", name = "foundation" }
androidx-compose-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout" }
androidx-compose-material = { group = "androidx.compose.material", name = "material" }
androidx-compose-material-icons-core = { module = "androidx.compose.material:material-icons-core" }
androidx-compose-material-icons-extended = { module = "androidx.compose.material:material-icons-extended" }
androidx-compose-runtime = { group = "androidx.compose.runtime", name = "runtime" }
androidx-compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
androidx-compose-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-tooling-preview" }
androidx-compose-ui-util = { group = "androidx.compose.ui", name = "ui-util" }
androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3", version.ref = "androidxComposeMaterial3" }
Подробнее здесь: https://stackoverflow.com/questions/797 ... -scrolling
Мобильная версия