1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Flutter】showDialog上でボタンを押した時に2個前のページに戻る

Posted at

備忘録です。

一覧ページ -> 詳細ページ -> Dialogを表示 

というページ構成の場合に、
Dialog上であるボタンを押したら一覧ページまで一気に戻る、という動線がよくあると思います。
(削除ボタンとか)

この時、AlertDialog上で

Navigator.popUntil(context, (route) {                
  return route.isFirst;
});

を実行しても一覧ページまで戻れません。
↓の感じにすると元のページ遷移も操作できます。

example.dart
void showMyDialog(BuildContext parentContext) {
  showDialog(
    context: parentContext,
    builder: (BuildContext dialogContext) {
      return AlertDialog(
        title: Text('Confirm'),
        content: Text('Do you want to go back?'),
        actions: <Widget>[
          TextButton(
            child: Text('Yes'),
            onPressed: () {
              Navigator.of(dialogContext).pop(); // ダイアログを閉じる
              Navigator.popUntil(parentContext, (route) { // 元のページ遷移の最初に戻る
                  return route.isFirst;
                });
            },
          ),
        ],
      );
    },
  );
}

これは詳細ページが持つNavigatorStateとDialogの持つNavigatorStateが異なるため、
呼び出す対象のcontextを明示してあげる必要があります。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?