Skip to content

Commit 67adb50

Browse files
authored
Merge pull request #979 from arkivanov/fix-children-animation
Fixed Children composable sometimes sticks with switching the stack quickly
2 parents 9452222 + 1c8d953 commit 67adb50

File tree

2 files changed

+8
-2
lines changed

2 files changed

+8
-2
lines changed

extensions-compose/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/stack/animation/AbstractStackAnimation.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,10 @@ internal abstract class AbstractStackAnimation<C : Any, T : Any>(
3838

3939
val newItems = getAnimationItems(newStack = currentStack, oldStack = oldStack)
4040
if (items.size == 1) {
41-
items = newItems
41+
val oldLastKey = items.keys.last()
42+
val (newLastKey, newLastItem) = newItems.entries.last()
43+
items = if ((newLastKey != oldLastKey) || newLastItem.direction.isExit) newItems else mapOf(newLastKey to newLastItem)
44+
nextItems = null
4245
} else {
4346
nextItems = newItems
4447
}

extensions-compose/src/commonMain/kotlin/com/arkivanov/decompose/extensions/compose/stack/animation/DefaultStackAnimator.kt

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,9 @@ import androidx.compose.animation.core.isFinished
77
import androidx.compose.animation.core.tween
88
import androidx.compose.runtime.Composable
99
import androidx.compose.runtime.LaunchedEffect
10+
import androidx.compose.runtime.getValue
1011
import androidx.compose.runtime.remember
12+
import androidx.compose.runtime.rememberUpdatedState
1113
import androidx.compose.ui.Modifier
1214

1315
internal class DefaultStackAnimator(
@@ -22,6 +24,7 @@ internal class DefaultStackAnimator(
2224
onFinished: () -> Unit,
2325
content: @Composable (Modifier) -> Unit,
2426
) {
27+
val onFinishedRef by rememberUpdatedState(onFinished)
2528
val animationState = remember(direction, isInitial) { AnimationState(initialValue = if (isInitial) 0F else 1F) }
2629

2730
LaunchedEffect(animationState) {
@@ -31,7 +34,7 @@ internal class DefaultStackAnimator(
3134
sequentialAnimation = !animationState.isFinished,
3235
)
3336

34-
onFinished()
37+
onFinishedRef()
3538
}
3639

3740
val factor =

0 commit comments

Comments
 (0)