TGViewer
Kotlin Adept Notes Kotlin Adept Notes @kotlin_adept · 2.43K subscribers
Post #22 2.1K
Compose withAnimation

В SwiftUI есть очень классная фича withAnimation, позволяющая сделать анимацию вьюшки просто путем изменения состояния, а сама анимация произойдет как по волшебству.


@State private var showDetail = false

var body: some View {
VStack {
Button("Show details") {
withAnimation {
showDetail.toggle()
}
}

if showDetail {
Text("Details")
}
}
}


Не справедливо, что такого механизма нет из коробки в Compose, и инженер из Google решил исправить это недоразумение. Он сделал свой аналог withAnimation и реализовал это с помощью Snapshot API, про который мы говорили ранее.

Как это работает?

1. Создается пустой словарь состояний для анимации
2. Выполняется лямбда блок внутри Snapshot, в этой лямбде могут происходить изменения стейта
3. У Snapshot вызывается writeObserver при каждой записи в State и заполняется информация для анимации
4. Данные мапятся в другой тип, откуда достаются измененные значения
5. Уничтожается Snapshot, чтобы не допустить утечек памяти, при этом изменения не применяются глобально! «Все что произошло в снапшоте, остается в снапшоте»©
6. Анимируются значения


internal suspend fun withAnimation(
adapterRegistry: StateObjectAdapterRegistry,
animationSpec: AnimationSpec<Any?>,
block: () -> Unit
) {
val statesToAnimate = mutableMapOf<Any, StateObjectAdapter>() // 1
val snapshot = Snapshot.takeMutableSnapshot(
writeObserver = { changedState ->
statesToAnimate[changedState] = checkNotNull(adapterRegistry.getAdapterFor(changedState)) // 3
}
)
val targetValues = snapshot.enter {
block() // 2
buildTargetValues(statesToAnimate) // 4
}
snapshot.dispose() // 5

animateValues(targetValues, animationSpec) // 6
}


Если у вас есть еще идеи как можно применить снапшоты, делитесь своими мыслями в комментариях👇

#Compose #Snapshots #Animations
  • 🔥 11
  • 👍 2
More from @kotlin_adept
  1. Sep 27, 2026На этом парад конференций Подлодки не заканчивается: уже на следующей неделе я выступлю с…
  2. Sep 26, 2026Полезные AI-тулзы для Android-разработчика На конференции обсудили разные AI-инструменты,…
  3. Sep 18, 2026Как подружить строгий Java-энтерпрайз со всеми ИИ изменениями? Сбер поможет разобраться 24…
  4. Sep 17, 2026Мифы и заблуждения в AI-разработке Забавно, как в мире AI-разработки постоянно появляются…
  5. Sep 15, 2026Тем временем мы с командой подготовили для вас новый сезон Podlodka Android Crew при подде…
  6. Sep 12, 2026Прошло уже более полугода с того момента, как я рассказывал вам о реализации Android-прило…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →