push<T> static method

Future<T?> push<T>(
  1. Widget page, {
  2. bool fullscreenDialog = false,
  3. bool preventDuplicates = true,
  4. bool opaque = true,
  5. bool maintainState = true,
  6. RouteTransitions transition = RouteTransitions.rightToLeft,
  7. Duration duration = const Duration(milliseconds: 300),
  8. Curve curve = Curves.easeOut,
  9. RouteSettings? settings,
  10. Object? arguments,
  11. VoidCallback? onDismiss,
})

Implementation

static Future<T?> push<T>(
  Widget page, {
  bool fullscreenDialog = false,
  bool preventDuplicates = true,
  bool opaque = true,
  bool maintainState = true,
  RouteTransitions transition = RouteTransitions.rightToLeft,
  Duration duration = const Duration(milliseconds: 300),
  Curve curve = Curves.easeOut,
  RouteSettings? settings,
  Object? arguments,
  VoidCallback? onDismiss,
}) {
  if (preventDuplicates && ModalRoute.of(navigatorKey.currentContext!)?.settings.name == page.runtimeType.toString()) {
    return Future<T?>.value();
  }

  return Navigator.push<T>(
    navigatorKey.currentContext!,
    PageRouteBuilder<T>(
      pageBuilder: (BuildContext context, Animation<double> _, Animation<double> _) => page,
      transitionsBuilder: _getTransition(transition, curve),
      transitionDuration: duration,
      reverseTransitionDuration: duration,
      settings: settings ?? RouteSettings(arguments: arguments),
      fullscreenDialog: fullscreenDialog,
      opaque: opaque,
      maintainState: maintainState,
    ),
  ).then((T? value) {
    onDismiss?.call();
    return value;
  });
}