отрегулируйте высоту содержимого с помощью нижнего листа в эшафоте нижних листов
Я хочу динамически изменять высоту содержимого относительно нижнего листа в нижнем листе следующим образом:
Это то, что я пробовал до сих пор: `
val bottomSheetState = rememberBottomSheetState(initialValue =BottomSheetValue.Expanded )
val bottomSheetScaffoldState= rememberBottomSheetScaffoldState(
bottomSheetState = bottomSheetState)
val heightPixels= LocalContext.current.resources.displayMetrics.heightPixels
BottomSheetScaffold(
modifier = Modifier.fillMaxSize()
sheetPeekHeight = 68.dp,
scaffoldState = bottomSheetScaffoldState,
sheetContent = {
/*
sheet content
*/
}) {
Box(modifier = Modifier
.fillMaxWidth()
.fillMaxHeight(((bottomSheetState.offset.value)
/ (heightPixels)).let { if (it == 0f) 1f else it })
) {
/*
content
*/
}
}
Но это зависит от высоты системы в пикселях, и поле с его содержимым перестраивается каждый раз, когда изменяется высота нижнего листа.
1 ответ
мне удалось это настроитьModifier.fillMaxHeight()
использоватьfraction
значение состояния каркаса, как показано ниже:
val bottomSheetState = rememberBottomSheetState(
initialValue = BottomSheetValue.Expanded
)
val bottomSheetScaffoldState = rememberBottomSheetScaffoldState(
bottomSheetState = bottomSheetState
)
BottomSheetScaffold(
modifier = Modifier.fillMaxSize(),
sheetPeekHeight = 68.dp,
scaffoldState = bottomSheetScaffoldState,
sheetContent = {
/*
sheet content
*/
}) {
val fraction = 1f - bottomSheetScaffoldState.currentFraction
Box(
modifier = Modifier
.padding(bottom = 68.dp)
.fillMaxHeight(fraction)
) {
/*
content
*/
}
}
currentFraction
это небольшая корректировка его значения, потому что ход анимации перетаскивания всегда идет от 0 до 1, независимо от того, идет ли он от к или отExpanded
кCollapsed
состояние:
@OptIn(ExperimentalMaterialApi::class)
val BottomSheetScaffoldState.currentFraction: Float
get() {
val fraction = bottomSheetState.progress.fraction
val targetValue = bottomSheetState.targetValue
val currentValue = bottomSheetState.currentValue
return when {
currentValue == BottomSheetValue.Collapsed && targetValue == BottomSheetValue.Collapsed -> 0f
currentValue == BottomSheetValue.Expanded && targetValue == BottomSheetValue.Expanded -> 1f
currentValue == BottomSheetValue.Collapsed && targetValue == BottomSheetValue.Expanded -> fraction
else -> 1f - fraction
}
}
Проблема в том, что это вызывает какое-то мерцание при расширении или сворачивании листа, что не идеально.