getAnimationSequence method

MultiAnimationSequence getAnimationSequence()
override

Implementation

MultiAnimationSequence getAnimationSequence() {
  Duration singleDuration =
      Duration(milliseconds: (duration.inMilliseconds / repeats / 2).round());
  var sequence = AnimationSequence<SmoothMatrix4>();

  for (int i = 0; i < repeats; i++) {
    if (i == 0) {
      sequence.add(
          value: SmoothMatrix4()
            ..translate(translation)
            ..rotateZ(angle),
          duration: Duration.zero,
          delay: delay);
    } else {
      sequence.add(
          value: SmoothMatrix4()
            ..translate(translation..scale(i / repeats))
            ..rotateZ(angle - i / repeats * angle),
          duration: singleDuration,
          curve: curve);
    }

    sequence.add(
        value: SmoothMatrix4()
          ..translate(-translation
            ..scale(i / repeats))
          ..rotateZ(-(angle - i / repeats * angle)),
        duration: singleDuration,
        curve: curve);
  }
  sequence.add(
      value: SmoothMatrix4(), duration: singleDuration, curve: curve);

  return MultiAnimationSequence(control: control, sequences: {
    AnimationProperty.transformAlignment: AnimationSequence<Alignment>()
      ..add(value: alignment, duration: Duration.zero),
    AnimationProperty.transform: sequence,
  });
}