AnimatedPageDragger constructor

AnimatedPageDragger({
  1. dynamic slideDirection,
  2. dynamic transitionGoal,
  3. dynamic slidePercent,
  4. StreamController<SlideUpdate>? slideUpdateStream,
  5. required TickerProvider vsync,
})

Implementation

AnimatedPageDragger({
  this.slideDirection,
  this.transitionGoal,
  slidePercent,
  StreamController<SlideUpdate>? slideUpdateStream,
  required TickerProvider vsync,
}) {
  final startSlidePercent = slidePercent;
  var endSlidePercent;
  var duration;

  if (transitionGoal == TransitionGoal.open) {
    endSlidePercent = 1.0;

    final slideRemaining = 1.0 - slidePercent;

    duration = new Duration(
        milliseconds: (slideRemaining / PERCENT_PER_MILLISECOND).round());
  } else {
    endSlidePercent = 0.0;
    duration = new Duration(
        milliseconds: (slidePercent / PERCENT_PER_MILLISECOND).round());
  }

  completionAnimationController =
      new AnimationController(duration: duration, vsync: vsync)
        ..addListener(() {
          slidePercent = lerpDouble(startSlidePercent, endSlidePercent,
              completionAnimationController.value);

          slideUpdateStream!.add(new SlideUpdate(
            UpdateType.animating,
            slideDirection,
            slidePercent,
          ));
        })
        ..addStatusListener((AnimationStatus status) {
          if (status == AnimationStatus.completed) {
            slideUpdateStream!.add(new SlideUpdate(
              UpdateType.doneAnimating,
              slideDirection,
              endSlidePercent,
            ));
          }
        });
}