aloisdeniel / aloisdeniel/keyframes_tween

Interpolating between animations from previous value

Open
#3 0 comments 0 reactions 0 assignees View on GitHub
Dominant language
Dart
Stars
19
Forks
3
PR merge metrics
No merged PRs in 30d

Description

I'm trying to achieve a behavior similar to TweenAnimationBuilder such that the previous value of the tween is used to start/continue the animation when running it.

My use-case is quickly switching between days and interpolating between some values. However, on top of that there's a transition sequence that I would like to play when doing so.

When playing this animation fully from value `a` to value `b` everything works as expected:

```dart

KeyframesTween getLabelTween(
double previousValue,
double value,
) {

return KeyframesTween([
KeyframeProperty(
[
1.0.keyframe(0.0),
0.0.keyframe(10 / 60),
0.0.keyframe(15 / 60),
1.0.keyframe(45 / 60, VisibleCurves.functionalEntrance),
],
name: 'opacity',
),
KeyframeProperty(
[
0.0.keyframe(10 / 60),
6.0.keyframe(15 / 60),
0.0.keyframe(45 / 60, VisibleCurves.functionalEntrance),
],
name: 'offset',
),

KeyframeProperty(
[
previousValue.keyframe(0.0),
0.0.keyframe(15 / 60),
value.keyframe(1.0),
],
name: 'value',
),
]);
}
```

However, when switching from `a` to `b` and then quickly to `c` the animation will restart from 0 and if the transition was in the middle, it will look jarring.

```dart
@override
void didUpdateWidget(covariant AnimatedTextSwitcher oldWidget) {
super.didUpdateWidget(oldWidget);
if (oldWidget.keyBuilder != widget.keyBuilder) {
switchDayAnimation(oldWidget.value);
}
}

void switchDayAnimation(String previousValue) {
_tween = getLabelTween(previousValue, widget.value);
_controller.forward(from: 0);
}
```

I'm trying to find a way to "memoize" the most recent animation state similarly how `TweenAnimationBuilder` achieves it. Do you see any possibility to combine that with keyframes_flutter?

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.