Устали от простыней кода с
InteractionSource и animate*AsState просто чтобы поменять цвет кнопки при нажатии? В Compose завозят решение!👉 Всё в одном блоке: Больше не нужно жонглировать модификаторами и стейтами. Вы создаете единый блок
Style, где описываете базовый вид и реакции на различные состояния (hovered, pressed, focused)👉 Автоматические анимации: Достаточно обернуть изменения в блок
animate { ... } (можно передать свой AnimationSpec), и система сама плавно заанимирует переходы👉 Умная инвалидация под капотом: Свойства стилей хранятся с использованием битовых масок. Если при нажатии меняется только цвет (свойства отрисовки),
Compose инвалидирует только фазу draw, полностью пропуская рекомпозицию и layout👉 Доступ к темам:
StyleScope имеет доступ к CompositionLocal, так что можно легко брать цвета из темы прямо внутри стиля, и они будут обновляться при ее сменеClickableStyleableBox(
onClick = onClick,
style = {
background(Color.Green)
size(150.dp)
hovered {
animate { background(Color.Yellow) }
}
pressed {
animate(tween(100)) { background(Color.Red) }
}
}
)