備忘録です。
一覧ページ -> 詳細ページ -> 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を明示してあげる必要があります。