跳至主要内容

`RouteInformation.location` 迁移指南

摘要

#

RouteInformation.location 和相关 API 已弃用,建议使用 RouteInformation.uri

上下文

#

为了处理来自不同网页域名的移动端深度链接,RouteInformation 需要授权信息。uri 字段被添加到 RouteInformation 中,用于捕获完整的深度链接信息,并且与路由相关的参数被转换为完整的 Uri 格式。这导致了一些不兼容 API 的弃用。

更改说明

#
  • RouteInformation.locationRouteInformation.uri 替换。
  • WidgetBindingObserver.didPushRoute 已被弃用。
  • SystemNavigator.routeInformationUpdatedlocation 参数被新添加的 uri 参数替换。

迁移指南

#

迁移前的代码

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

迁移后的代码

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

迁移前的代码

dart
final String myPath = myRoute.location;

迁移后的代码

dart
final String myPath = myRoute.uri.path;

迁移前的代码

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

迁移后的代码

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(),
    )
  );
}

迁移前的代码

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

迁移后的代码

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

时间线

#

包含于版本:3.10.0-13.0.pre
稳定版发布:3.13.0

参考

#

相关 PR

  • PR 119968: 为 RouteInformation 和 didPushRouteInformation 实现 url 支持。