Jetpack Compose: как получить размер компонуемого на определенном уровне в цепочке модификаторов?
Я хочу использовать модификатор для компонуемого, но я хочу знать размер компонуемого перед применением и сохранить размер в изменяемой карте.
Я пытался
.fillMaxSize()
.onSizeChanged {
sizes[page] = it
}
а также пробовал
.fillMaxSize()
// according to documentation, the position of onGloballyPositioned modifier in the modifier chain doesn't change anything
.onGloballyPositioned {
sizes[page] = it.size
}
но они не дали мне правильный размер (на размер все еще повлиялоfillMaxSize
). Тогда я решил использоватьlayout
модификатор:
.fillMaxSize()
.layout { measurable, constraints ->
val placeable = measurable.measure(
// I need to build my own constraints so the ones passed down from fillMaxSize are not used
Constraints(
minWidth = 0,
maxWidth = constraints.maxWidth,
minHeight = 0,
maxHeight = constraints.maxHeight
)
)
sizes[page] = IntSize(placeable.width, placeable.height)
layout(placeable.width, placeable.height) {
placeable.placeRelative(0,0)
}
}
Кажется, это работает, и я думаю, что мог бы сделать из него собственный модификатор, но мне интересно, это правильный путь или есть более простой способ?