`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 支援。