ルートとナビゲーターのリファクタリング
まとめ
のRoute
クラスはオーバーレイ内のオーバーレイ エントリを管理しなくなりました。
そしてそのinstall()
メソッドはもうありませんinsertionPoint
パラメータ。
のisInitialRoute
の財産RouteSetting
廃止されました、
とNavigator.pop()
値を返さなくなりました。
コンテクスト
新しいページ API に備えてナビゲーター API をリファクタリングしました。
そして、Router
で概説されているウィジェット
のルーター設計書。
このリファクタリングにより、関数シグネチャの変更がいくつか導入されました
既存のナビゲーター API を引き続き機能させるため
新しいページ API を使用します。
変更内容の説明
ブール値の戻り値は、Navigator.pop()
元気がなかった
定義されており、ユーザーは次の呼び出しによって同じ結果を達成できます。Navigator.canPop()
。
API以来、Navigator.canPop()
より適切に定義された、
私たちは簡略化しましたNavigator.pop()
ブール値を返さないようにします。
一方、ナビゲーターには次のような能力が求められます。
オーバーレイ内のエントリを手動で再配置して、
ユーザーは新しい API でルート履歴を変更できます。
ルートが作成と破棄のみになるように変更しました。
ナビゲータがオーバーレイ エントリを挿入するか、
オーバーレイからオーバーレイ エントリを削除します。
また、insertionPoint
の議論Route.install()
変更後は廃止されたため。
最後に、isInitialRoute
からの財産RouteSetting
リファクタリングの一環として、onGenerateInitialRoutes
を完全に制御するための API
初期ルートの生成。
移行ガイド
ケース 1: アプリが依存するものpop()
ブール値を返します。
TextField(
onTap: () {
if (Navigator.pop(context))
print(‘There still is at least one route after pop’);
else
print(‘Oops! No more routes.’);
}
)
使用できますNavigator.canPop()
と組み合わせてNavigator.pop()
同じ結果を達成するために。
TextField(
onTap: () {
if (Navigator.canPop(context))
print(‘There still is at least one route after pop’);
else
print(‘Oops! No more routes.’);
// Our navigator pops the route anyway.
Navigator.pop(context);
}
)
ケース 2: アプリは以下に基づいてルートを生成します。isInitialRoute
。
MaterialApp(
onGenerateRoute: (RouteSetting setting) {
if (setting.isInitialRoute)
return FakeSplashRoute();
else
return RealRoute(setting);
}
)
この変更を移行するにはさまざまな方法があります。
1 つの方法は、初期ルート名を設定することです。
固定値に設定して特定のルートを生成する
(FakeSplashRoute
上の例では)
路線名に。
MaterialApp(
initialRouteName: ‘fakeSplash’,
onGenerateRoute: (RouteSetting setting) {
if (setting.name == ‘fakeSplash’)
return FakeSplashRoute();
else
return RealRoute(setting);
}
)
より複雑なユースケースがある場合は、
新しい API を使用できます。onGenerateInitialRoutes
、
のMaterialApp
またCupertinoApp
。
MaterialApp(
onGenerateRoute: (RouteSetting setting) {
return RealRoute(setting);
},
onGenerateInitialRoutes: (String initialRouteName) {
return <Route>[FakeSplashRoute()];
}
)
タイムライン
リリースされたバージョン: 1.16.3
安定版リリース: 1.17
参考文献
設計ドキュメント:
API ドキュメント:
Route
Route.install
RouteSetting.isInitialRoute
Navigator
Navigator.pop
Navigator.canPop
関連する問題:
- 問題 45938: ルーター
関連する PR:
- PR 44930- 新しいナビゲーション システムで引き続き動作するように命令型 API をリファクタリングします