FloatingDraggableController constructor

FloatingDraggableController({
  1. required TickerProvider vsync,
  2. bool initialVisibility = true,
  3. Duration duration = const Duration(milliseconds: 300),
  4. Duration? visibilityDuration,
  5. Duration? naturalElasticDuration,
  6. Curve naturalElasticCurve = Curves.bounceOut,
  7. Duration? restrictAfter = const Duration(seconds: 3),
  8. Duration? restrictDuration,
  9. Curve restrictCurve = Curves.linearToEaseOut,
})

Implementation

FloatingDraggableController({
  required TickerProvider vsync,
  bool initialVisibility = true,
  Duration duration = const Duration(milliseconds: 300),
  Duration? visibilityDuration,
  Duration? naturalElasticDuration,
  Curve naturalElasticCurve = Curves.bounceOut,
  Duration? restrictAfter = const Duration(seconds: 3),
  Duration? restrictDuration,
  Curve restrictCurve = Curves.linearToEaseOut,
})  : _vsync = vsync,
      _visibilityDuration = visibilityDuration ?? duration,
      _naturalElasticDuration = naturalElasticDuration ?? duration,
      _naturalElasticCurve = naturalElasticCurve,
      _restrictDuration = restrictDuration ?? duration,
      _restrictCurve = restrictCurve {
  _visibilityController.value = initialVisibility ? 1.0 : 0.0;

  if (restrictAfter != null) {
    naturalElasticAnimation.addStatusListener((status) async {
      switch (status) {
        case AnimationStatus.forward:
        case AnimationStatus.reverse:
        case AnimationStatus.dismissed:
          break;
        case AnimationStatus.completed:
          final animationKey = Object();
          _animationKey = animationKey;
          await Future.delayed(restrictAfter);
          if (_animationKey != animationKey) return;
          await animateRestrict();
          break;
      }
    });
  }
}