[Flutter] showDialogをルートWidgetで呼ぶ方法
例えば、アプリ内の各画面遷移時やバックグラウンドから復帰時にアプリアップデートが必要かを調べ、必要な場合に強制アップデートダイアログを出す場合とかにルートでダイアログを使いたくなる。
ポイントは2点
1. MaterialApp Widget内でshowDialogする
https://stackoverflow.com/questions/53294551/showdialog-from-root-widget
MaterialAppでBuildContextが暗黙的に生成されるので、その中でshowDialogしないとcontextが無くエラーになる。
2. Future.delayedでshowDialogする
https://stackoverflow.com/questions/52059024/show-dialog-on-widget/52062540#52062540
StateNotifierとかChangeNotifierでStateを判定 → その結果に基づいてshowDialogしたりしている場合、ただshowDialogしてもエラーになる。 (1.と同様の理由?)
記事のように、即時実行でなくFuture.delayedを使って処理を後ろに回してshowDialogすると正常に動作する。
State変更によるWidget再構築によってBuildContextが一時的に消失するのが原因かな?とは思っている。