pushDragToPopRoute function

Future pushDragToPopRoute({
  1. required BuildContext context,
  2. required Widget child,
  3. bool fullscreenDialog = false,
  4. RouteSettings? settings,
  5. Duration transitionDuration = const Duration(milliseconds: 250),
  6. Duration reverseTransitionDuration = const Duration(milliseconds: 250),
  7. Color? barrierColor,
  8. String? barrierLabel,
  9. bool barrierDismissible = false,
  10. bool maintainState = true,
})

Implementation

Future<dynamic> pushDragToPopRoute({
  required BuildContext context,
  required Widget child,
  bool fullscreenDialog = false,
  RouteSettings? settings,
  Duration transitionDuration = const Duration(milliseconds: 250),
  Duration reverseTransitionDuration = const Duration(milliseconds: 250),
  Color? barrierColor,
  String? barrierLabel,
  bool barrierDismissible = false,
  bool maintainState = true,
}) async =>
    await Navigator.of(context).push(
      PageRouteBuilder(
        transitionDuration: transitionDuration,
        reverseTransitionDuration: reverseTransitionDuration,
        fullscreenDialog: fullscreenDialog,
        opaque: false,
        transitionsBuilder: (
          BuildContext context,
          Animation<double> animation,
          _,
          Widget child,
        ) {
          if (animation.status == AnimationStatus.reverse ||
              animation.status == AnimationStatus.dismissed)
            return FadeTransition(
              opacity: CurvedAnimation(
                parent: animation,
                curve: Curves.easeInExpo,
              ),
              child: child,
            );

          return FadeTransition(opacity: animation, child: child);
        },
        pageBuilder: (_, __, ___) => DragToPop(child: child),
        maintainState: maintainState,
        barrierColor: barrierColor,
        barrierLabel: barrierLabel,
        barrierDismissible: barrierDismissible,
        settings: settings,
      ),
    );