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)
    }
}

Кажется, это работает, и я думаю, что мог бы сделать из него собственный модификатор, но мне интересно, это правильный путь или есть более простой способ?

0 ответов

Другие вопросы по тегам