Saltar al contenido principal

Guía de migración para RouteInformation.location

Depreciación de `RouteInformation.location` y sus APIs relacionadas.

Resumen

#

RouteInformation.location y las APIs relacionadas fueron depreciadas a favor de RouteInformation.uri.

Contexto

#

RouteInformation necesita la información de autoridad para manejar deeplinks móviles desde diferentes dominios web. El campo uri se añadió a RouteInformation para capturar toda la información del deeplink y los parámetros relacionados con la ruta se convirtieron al formato completo Uri. Esto llevó a la depreciación de las APIs incompatibles.

Descripción del cambio

#
  • RouteInformation.location fue reemplazado por RouteInformation.uri.
  • WidgetBindingObserver.didPushRoute fue depreciado.
  • El parámetro location de SystemNavigator.routeInformationUpdated fue reemplazado por el parámetro uri recién añadido.

Guía de migración

#

Código antes de la migración:

dart
const RouteInformation myRoute = RouteInformation(location: '/myroute');

Código después de la migración:

dart
final RouteInformation myRoute = RouteInformation(uri: Uri.parse('/myroute'));

Código antes de la migración:

dart
final String myPath = myRoute.location;

Código después de la migración:

dart
final String myPath = myRoute.uri.path;

Código antes de la migración:

dart
class MyObserverState extends State<MyWidget> with WidgetsBindingObserver {
  @override
  Future<bool> didPushRoute(String route) => _handleRoute(route);
}

Código después de la migración:

dart
class MyObserverState extends State<MyWidget> with WidgetsBindingObserver {
  @override
  Future<bool> didPushRouteInformation(RouteInformation routeInformation) => _handleRoute(
    Uri.decodeComponent(
      Uri(
        path: uri.path.isEmpty ? '/' : uri.path,
        queryParameters: uri.queryParametersAll.isEmpty ? null : uri.queryParametersAll,
        fragment: uri.fragment.isEmpty ? null : uri.fragment,
      ).toString(),
    )
  );
}

Código antes de la migración:

dart
SystemNavigator.routeInformationUpdated(location: '/myLocation');

Código después de la migración:

dart
SystemNavigator.routeInformationUpdated(uri: Uri.parse('/myLocation'));

Timeline

#

Introducido en la versión: 3.10.0-13.0.pre
En el lanzamiento estable: 3.13.0

Referencias

#

PRs relevantes:

  • PR 119968: Implementar soporte de url para RouteInformation y didPushRouteInformation.