RouteInformation.location 的遷移指南
摘要
#RouteInformation.location 及相關 API 已被棄用, 建議改用 RouteInformation.uri。
背景說明
#RouteInformation 需要 authority 資訊, 以處理來自不同網域的行動裝置深層連結 (deep links)。 在 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 支援。