Flutterで任意の画面までPopUntilしたい
- 商品検索
- 商品詳細
- 会員登録 or ログイン
- ログインページ
こういうページ遷移の時、ログインページでログインが完了したら、2番の商品詳細に戻したい場合のTipsです。
2の商品詳細は、1の親画面でタップされたデータを元に画面を初期化するので、予めroutes:
に画面遷移を登録できないので、MaterialPageRoute
を毎回呼び出して画面遷移をしています。
PopUntil
で戻るためには、route.settings
に遷移履歴をセットしておかないと任意の画面まで戻れないので、以下のようなコードを書いて都度RouteSetting
を指定します。これで戻れます。
遷移する時
Navigator.of(context).push(MaterialPageRoute( //これ settings: RouteSettings(name: ItemDetailPage.routeName), builder: (context) => ItemDetailPage(item: item), ));
戻る時
Navigator.of(context).popUntil((route) => route.settings.name == ItemDetailPage.routeName);
良く出来てるよ、Flutterって。ネイティブアプリを作る面倒さを味わっているから、本当に楽しくネイティブアプリが書ける。設計思想も勉強になる。