Flutterのroute設定について補足説明をします。
前回はroute設定にonGenerateRoute
を使いましたが、これを使わない方法もあります。
MaterialApp
がonGenerateRoute
またはroutes
プロパティを持っていればroute設定ができるようです。
またhome
プロパティだけ持っていればアプリケーションを起動できますので、ページ遷移がない場合はonGenerateRoute
とroutes
は不要です。
routes
と onGenerateRoute
の違い
似たような働きをするプロパティですが、挙動は少しだけ異なります。また、それぞれの特徴を使って併用することも可能です。
アプリケーションからnaemd routeがpushされた際、まずroutes
テーブルが参照されます。このテーブルで解決できなかった際にonGenerateRoute
に割り当てられたメソッドが呼ばれます。
また、routes
による定義ではモーダル表示が使えません。モーダル表示を使う場合はonGenerateRoute
を設定することになります。このやり方を下に実際のコードの例で示しています。
型 | 特徴 | |
---|---|---|
routes | const Map<String, WidgetBuilder> |
先に呼ばれる |
onGenerateRoute | Route<dynamic> Function(RouteSettings settings) |
動的、モーダル表示が可能等 |
実際のコードの例
MaterialApp(
title: "Routing Demonstration",
routes: {
'/': (context) => HomePage(),
'/second_page': (context) => SecondPage(),
onGenerateRoute: (settings) {
if (settings.name == '/third_page') {
return MaterialPageRoute(
builder: (context) => ThirdPage(),
// モーダル表示
fullscreenDialog: true,
);
}
}
),