showDialogを使って全画面にDialogを表示させたい。
そもそも、showDialog自体、私たWidgetをダイアログとして表示してくれちゃうので、
ContainerのheightとwidthにMediaQueryを渡せばできると思い、やってみました。
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('画像表示'),
backgroundColor: Colors.red,
),
body: Center(
child: ElevatedButton(
child: const Text('モーダル表示'),
onPressed: () {
showDialog(
context: context,
builder: (buolder) => Container(
height: MediaQuery.of(context).size.height, // 端末の高さを指定
width: MediaQuery.of(context).size.width, // 端末の幅を指定
decoration: const BoxDecoration(color: Colors.blue),
child: const Center(
child: Text(
'全画面表示',
style: TextStyle(
color: Colors.white, // デフォルトのTextStyleが強烈なため回避してます
decoration: TextDecoration.none, // デフォルトのTextStyleが強烈なため回避してます
fontSize: 40.0,
fontWeight: FontWeight.w400,
),
),
),
));
},
),
),
);
}
表示結果がこれ。
あれ。なんか上下が足りない。
Dialog表示には限界値があるのかなと、メソッドを除いてみた結果
useSafeArea
なるものが目に入りました。
なので、showDialogのuseSafeAreaのパラメータをfalseに設定して実行してみた結果
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('画像表示'),
backgroundColor: Colors.red,
),
body: Center(
child: ElevatedButton(
child: const Text('モーダル表示'),
onPressed: () {
showDialog(
context: context,
useSafeArea: false, // ここを追加!!
builder: (buolder) => Container(
height: MediaQuery.of(context).size.height,
width: MediaQuery.of(context).size.width,
decoration: const BoxDecoration(color: Colors.blue),
child: const Center(
child: Text(
'全画面表示',
style: TextStyle(
color: Colors.white,
decoration: TextDecoration.none,
fontSize: 40.0,
fontWeight: FontWeight.w400,
),
),
),
));
},
),
),
);
}
できた!!
SafeAreaが効いていたみたいです。
これを明示的にfalseに書き換えてあげることで、問題を解決しました。
めっちゃ簡単でした(苦笑)