to<T> static method

Future<T?>? to<T>(
  1. Widget page, {
  2. NeuronPageTransition? transition,
  3. Duration? duration,
  4. Duration? reverseDuration,
  5. Curve? curve,
  6. Curve? reverseCurve,
})

Push a page on the navigator stack.

Implementation

static Future<T?>? to<T>(
  Widget page, {
  NeuronPageTransition? transition,
  Duration? duration,
  Duration? reverseDuration,
  Curve? curve,
  Curve? reverseCurve,
}) {
  final nav = navigatorKey.currentState;
  if (nav == null) return null;

  if (transition == null) {
    return nav.push(MaterialPageRoute(builder: (_) => page));
  }

  final spec = NeuronTransitionSpec(
    duration: duration ?? const Duration(milliseconds: 320),
    reverseDuration: reverseDuration ?? const Duration(milliseconds: 280),
    curve: curve ?? Curves.easeOutCubic,
    reverseCurve: reverseCurve ?? Curves.easeInCubic,
  );

  return nav.push(
    PageRouteBuilder<T>(
      pageBuilder: (context, animation, secondaryAnimation) => page,
      transitionDuration: spec.duration,
      reverseTransitionDuration: spec.reverseDuration,
      transitionsBuilder: (context, animation, secondaryAnimation, child) {
        final curvedAnimation = CurvedAnimation(
          parent: animation,
          curve: spec.curve,
          reverseCurve: spec.reverseCurve,
        );
        return NeuronTransitions.build(
          transition,
          curvedAnimation,
          secondaryAnimation,
          child,
          spec,
        );
      },
    ),
  );
}