aloisdeniel / aloisdeniel/keyframes_tween

Interpolating between animations from previous value

Abierto
#3 0 comentarios 0 reacciones 0 asignados Ver en GitHub
Lenguaje dominante
Dart
Estrellas
19
Forks
3
Métricas de merge de PR
Sin PR fusionados en 30 d

Descripción

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?

Guía de contribución

No hay ninguna guía de contribución indexada para este repositorio

Evaluación

Este issue todavía no se ha evaluado.

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.