跳至主要內容

RouteInformation.location 遷移指南

摘要

#

RouteInformation.location 和相關 API 已被棄用,改用 RouteInformation.uri

背景

#

RouteInformation 需要授權資訊來處理來自不同網域的行動裝置深層連結。uri 欄位已新增至 RouteInformation,以擷取整個深層連結資訊,且與路由相關的參數已轉換為完整的 Uri 格式。這導致不相容的 API 被棄用。

變更描述

#
  • RouteInformation.location 已被 RouteInformation.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 實作網址支援。