rrousselGit / flutter_hooks

React hooks for Flutter. Hooks are a new kind of object that manages a Widget life-cycles. They are used to increase code sharing between widgets and as a complete replacement for StatefulWidget.
MIT License
3.14k stars 179 forks source link

Tween hooks #39

Open rrousselGit opened 5 years ago

rrousselGit commented 5 years ago

Flutter offer multiple Tween classes.

A common use-case it to use them to tween between a previous and new value through didUpdateWidget.

Through hooks, this can be automated into a useTween:

final counter = useState(0);
final Tween tween = useTween(counter.value);
sahandevs commented 5 years ago

something like this? :


V useTween<T extends Tween<V>, V extends dynamic>(
  V value, {
  @required T Function(V begin, V end) builder,
  Duration duration,
  double progress,
}) {
  assert(builder != null);
  assert(progress != null && duration != null);
  assert(progress == null && duration == null);
  assert(progress != null && (progress > 1.0 || progress < 1.0));

}

usage :


final color = useTween(Colors.red.shade400,
  builder: (begin, end) => ColorTween(begin: begin, end: end),
  progress: 0.5
);
rrousselGit commented 4 years ago

Flutter now has TweenAnimationBuilder so that hook is not very important.

Although if we want to make such hook, it'd be logical to use the same API as TweenAnimationBuilder:

final value = useTween(IntTween(end: 42), duration: const Duration(seconds: 2));
timcreatedit commented 3 months ago

We have hooks like this in rivership. They are insanely practical, and this is our implementation.

It's partly opinionated and wouldn't be feasible to move over here like this, but I could raise a PR with a similar implementation if you think these hooks are a fit?

rrousselGit commented 3 months ago

Sure that'd be valuable!