PS:何かをするのは簡単だが、実際に何かをするのは難しい。
Navigator はスタックルールを使用して Widget を管理し、Navigator はページのアクセス履歴を記録します。Navigator を使用してページ間の遷移操作を行うことができます。
Android 開発において、私たちが通常言う「遷移」は Activity の遷移を指し、ページ遷移とも呼ばれます。Flutter では Route の遷移を指し、Android のページは Flutter では Route に対応します。Navigator は Route オブジェクトのスタック管理を担当し、Navigator.push や Navigator.pop のようなスタック管理メソッドを提供します。
上記のように、Flutter は Route の入栈と出栈のメソッドを提供しています。Android の一部のデバイスには戻るキーがあり、この戻るキーは Flutter の Navigator.push および Navigator.pop メソッドと互換性があります。もし特定のデバイスに対応する戻るキーがない場合は、AppBar に戻るボタンを追加できます。Scaffold にはすでに戻るボタンが追加されており、トリガーされると Navigator.pop 操作が呼び出されます。本文の内容は以下の通りです:
- 基本的なルートナビゲーション
- ルートパラメータの受け渡し
- その他のルートナビゲーション
基本的なルートナビゲーション#
前述のように、Flutter ではスタックを使用して Widget を管理し、入栈と出栈のメソッドはそれぞれ Navigator.push と Navigator.pop です。この 2 つのメソッドを使用してページ間の遷移や戻り操作を行います。
Navigator.push#
Navigator.push は Route の入栈操作を実行するために使用され、指定された Route を介して対応するページに遷移できます。メソッドは以下の通りです:
MaterialPageRoute を使用して対応するページのルートを構築し、使用方法は以下の通りです:
Navigator.pop#
Navigator.pop は Route の退栈操作を実行し、ページを戻るために使用されます。オプションのパラメータ result を追加して、ページが戻るときに持ち帰るパラメータとして使用できます。メソッドは以下の通りです:
以下のように、IconButton をクリックして現在のページを退出します:
Navigator.pushNamed#
Navigator.pushNamed は、名前付き Route の入栈操作を実行するために使用され、オプションのパラメータ arguments を介してパラメータを渡すことができます。メソッドは以下の通りです:
使用する際は、まず MaterialApp 内で対応するルート名をルートテーブル routes に追加します。コードは以下の通りです:
これで Navigator.pushNamed を使用して NavigatorPushNamedPage に遷移できるようになります。以下のように:
以上が Flutter における最も基本的なページナビゲーションの方法です。Navigator.push でも Navigator.pushNamed でも、NavigatorState の push メソッドに基づいて実装されています。NavigatorState は具体的な BuildContext を介して Navigator.of (context) によって取得され、NavigatorState の push メソッドは以下の通りです:
次に、Flutter におけるパラメータの受け渡しについて説明します。これにはページ遷移時のパラメータの受け渡しとページ戻り時のパラメータの受け渡しが含まれます。
ルートパラメータの受け渡し#
ページ遷移プロセスにおけるパラメータの受け渡しには、ページ遷移時に持ち運ぶパラメータとページ戻り時に持ち運ぶパラメータが含まれます。
Navigator.push でのパラメータの受け渡し#
Navigator.push を使用してパラメータを持ってページ遷移を行う場合、パラメータは対応するページのコンストラクタで受け取ります。具体的な使用方法は以下の通りです:
Navigator.pushNamed でのパラメータの受け渡し#
上記のように、Navigator.pushNamed (context, routeName, {arguments}) メソッドのオプションパラメータ arguments は、遷移時に持ち運ぶパラメータです。まず、MaterialApp の onGenerateRoute で arguments を受け取ります。以下のように:
その後、Navigator.pushNamed を使用してページ遷移を行い、パラメータは対応するページのコンストラクタで受け取ります。以下のように:
ページ戻り時のパラメータの受け渡し#
上記のように、Navigator.pop (context, [result]) メソッドのオプションパラメータ result は、ページ戻り時に持ち運ぶパラメータです。Navigator.push は Future を返し、then 文でページ戻りの結果を処理します。具体的な使用方法は以下の通りです:
その他のルートナビゲーション#
その他の一般的なルートナビゲーション方法は以下の通りです:
その他のルートに関連する操作メソッドはすべて列挙することはできませんので、関連 API を参照してください。