didReplace method

  1. @override
void didReplace({
  1. Route? newRoute,
  2. Route? oldRoute,
})
override

The Navigator replaced oldRoute with newRoute.

Implementation

@override
void didReplace({Route? newRoute, Route? oldRoute}) {
  super.didReplace(newRoute: newRoute, oldRoute: oldRoute);
  final newName = _extractRouteName(newRoute);
  final oldName = _extractRouteName(oldRoute);
  final currentRoute = _RouteData.ofRoute(oldRoute);

  // Log route replacement information
  Get.log("REPLACE ROUTE $oldName");
  Get.log("NEW ROUTE $newName");

  // Report the new current route if available
  if (newRoute != null) {
    RouterReportManager.instance.reportCurrentRoute(newRoute);
  }

  // Update routing information
  _routeSend?.update((value) {
    // Update current route if it's a page route
    switch (newRoute) {
      case PageRoute():
        value.current = newName ?? "";
      default:
        // Keep current value
        break;
    }

    // Update other routing properties
    value.args = newRoute?.settings.arguments;
    value.route = newRoute;
    value.isBack = false;
    value.removed = "";
    value.previous = oldName ?? '';

    // Reset bottom sheet and dialog flags if needed
    value.isBottomSheet =
        currentRoute.isBottomSheet ? false : value.isBottomSheet;
    value.isDialog = currentRoute.isDialog ? false : value.isDialog;
  });

  // Report route disposal for specific route types
  if (oldRoute is GetPageRoute) {
    RouterReportManager.instance.reportRouteWillDispose(oldRoute);
  }

  routing?.call(_routeSend);
}