off<T>  method 
- Widget page(), {
- bool? opaque,
- Transition? transition,
- Curve? curve,
- bool? popGesture,
- int? id,
- String? routeName,
- dynamic arguments,
- List<BindingsInterface> bindings = const [],
- bool fullscreenDialog = false,
- bool preventDuplicates = true,
- Duration? duration,
- double gestureWidth(- BuildContext context
 
Navigation.pushReplacement() shortcut .
Pop the current page and pushes a new page to the stack
It has the advantage of not needing context, so you can call from your business logic
You can set a custom transition, define a Tween curve,
and a transition duration.
You can send any type of value to the other route in the arguments.
Just like native routing in Flutter, you can push a route
as a fullscreenDialog,
id is for when you are using nested navigation,
as explained in documentation
If you want the same behavior of ios that pops a route when the user drag,
you can set popGesture to true
If you're using the BindingsInterface api, you must define it here
By default, Flower will prevent you from push a route that you already in,
if you want to push anyway, set preventDuplicates to false
Implementation
Future<T?>? off<T>(
  Widget Function() page, {
  bool? opaque,
  Transition? transition,
  Curve? curve,
  bool? popGesture,
  int? id,
  String? routeName,
  dynamic arguments,
  List<BindingsInterface> bindings = const [],
  bool fullscreenDialog = false,
  bool preventDuplicates = true,
  Duration? duration,
  double Function(BuildContext context)? gestureWidth,
}) {
  routeName ??= "/${page.runtimeType.toString()}";
  routeName = _cleanRouteName(routeName);
  if (preventDuplicates && routeName == currentRoute) {
    return null;
  }
  return searchDelegate(id).off(
    page,
    opaque: opaque ?? true,
    transition: transition,
    curve: curve,
    popGesture: popGesture,
    id: id,
    routeName: routeName,
    arguments: arguments,
    bindings: bindings,
    fullscreenDialog: fullscreenDialog,
    preventDuplicates: preventDuplicates,
    duration: duration,
    gestureWidth: gestureWidth,
  );
}