3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【Flutter】showDialogを使ってを全画面で表示させる方法

Last updated at Posted at 2023-08-23

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,
                          ),
                        ),
                      ),
                    ));
          },
        ),
      ),
    );
  }

表示結果がこれ。

IMG_8779.jpeg

あれ。なんか上下が足りない。

Dialog表示には限界値があるのかなと、メソッドを除いてみた結果

スクリーンショット 2023-08-16 18.56.22.png

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に書き換えてあげることで、問題を解決しました。

めっちゃ簡単でした(苦笑)

3
2
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
3
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?