NavigatorCompatibilityOverrides constructor

const NavigatorCompatibilityOverrides({
  1. PushReplacementOperation? pushReplacement,
  2. PushAndRemoveUntilOperation? pushAndRemoveUntil,
  3. RemoveRouteOperation? removeRoute,
  4. PushOperation? push,
  5. RouteIdGenerator routeIdGenerator = _generateRouteId,
  6. CustomRoutePageFactoryResolver? customRoutePageFactoryResolver,
  7. CompatibilityObserver? observer,
})

Central component of the compatibility layer that adapts Navigator 1.0 operations for use with YxNavigation's declarative architecture.

Purpose

Enables seamless integration of legacy Navigator 1.0 code (pageless routes) with YxNavigation (page-based routes) by:

  1. Intercepting Navigator 1.0 operations (push, pop, pushReplacement, etc.)
  2. Wrapping pageless routes in Page objects
  3. Synchronizing route state with RouteNode tree
  4. Managing route result Completers for proper async behavior

Supported Operations

  • push - Creates new pageless route
  • pop - Closes route and returns result
  • pushReplacement - Replaces current route
  • pushAndRemoveUntil - Clears stack with predicate
  • removeRoute - Removes specific route from stack

Supported Route Types

Out of the box support:

Custom routes via CustomRoutePageFactoryResolver.

Features

Observer

Register a CompatibilityObserver to monitor pageless route lifecycle events for analytics, debugging, or migration tracking.

Usage

Register with NavigationConfigProvider:

NavigationConfigProvider(
  navigatorOverrides: NavigatorCompatibilityOverrides(
    // Optional: custom route resolver
    customRoutePageFactoryResolver: MyCustomResolver(),

    // Optional: observer for analytics/debugging
    observer: MyCompatibilityObserver(),
  ),
  child: MaterialApp.router(routerConfig: config),
)

See also:

Implementation

const NavigatorCompatibilityOverrides({
  super.pushReplacement,
  super.pushAndRemoveUntil,
  super.removeRoute,
  super.push,
  super.routeIdGenerator,
  CustomRoutePageFactoryResolver? customRoutePageFactoryResolver,
  super.observer,
}) : _customRoutePageFactoryResolver = customRoutePageFactoryResolver;