概述

#

`RouteInformation.location` 及其相关 API 已被弃用,转而支持 `RouteInformation.uri`。

背景

#

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

变更说明

#
  • `RouteInformation.location` 被 `RouteInformation.uri` 替换。
  • `WidgetBindingObserver.didPushRoute` 已被弃用。
  • `SystemNavigator.routeInformationUpdated` 的 `location` 参数已被新添加的 `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 支持。