`RouteInformation.location` 的迁移指南
概述
#`RouteInformation.location` 及其相关 API 已被弃用,取而代之的是 `RouteInformation.uri`。
背景
#为了处理来自不同 Web 域的移动设备深度链接,RouteInformation
需要授权信息。`RouteInformation` 中新增了 `uri` 字段,该字段捕获了完整的深度链接信息,并将与路由相关的参数转换为完整的 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 支持。