@kokogento

Flutter 端末サイズによってWidgetの大きさを比率で指定する方法

はじめに

上記を参考にしました。間違ってたらごめんなさい。。

Widgetの大きさを固定すると

FlutterでUIを作る際に、Widgetの大きさを固定値で指定するのはできるだけ避けたいところです。。。

Container(
 height: 40,
 width: 60,
),

もし上記のように指定した場合、iPhone 5sとiPhone Xs Maxでは見た目のサイズ感が違っています。。

スクリーンショット 2021-05-04 9.57.20.jpg

なぜなら、Flutterはどの端末でアプリが実行されているかわからないため、Containerは常に40 x 60となります。

さまざまな画面サイズに応じてWidgetの大きさを比率で指定する

さてここから本題です。

どの画面サイズでも同じような大きさの比率でWidgetを表示させるために、画面をグリッドのように区切って「ブロック」ができるようにイメージします。

スクリーンショット 2021-05-04 10.04.05.jpg

どの画面サイズでも「ブロック3つ分の横幅」みたいなサイズ指定をするイメージかと。

size_config.dartを作る

lib/config/size_config.dart
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';

class SizeConfig {
  static MediaQueryData _mediaQueryData;
  static double screenWidth;
  static double screenHeight;
  static double blockSizeHorizontal;
  static double blockSizeVertical;

  static double _safeAreaHorizontal;
  static double _safeAreaVertical;
  static double safeBlockHorizontal;
  static double safeBlockVertical;

  void init(BuildContext context) {
    _mediaQueryData = MediaQuery.of(context);
    screenWidth = _mediaQueryData.size.width;
    screenHeight = _mediaQueryData.size.height;
    blockSizeHorizontal = screenWidth / 100;
    blockSizeVertical = screenHeight / 100;
  }
}

SizeConfigを初期化して使う

lib/main.dart
import './config/size_config.dart';

class HomeScreen extends StatelessWidget {
 @override
 Widget build(BuildContext context) {
 SizeConfig().init(context);
 return Center(
  child: Container(
   height: SizeConfig.blockSizeVertical * 20,
   width: SizeConfig.blockSizeHorizontal * 50,
   color: Colors.orange,
  ),
 );
 }

これで長方形のサイズは、
width : 画面の幅50%
height : 画面の高さ20%

となります!!!

スクリーンショット 2021-05-04 12.11.44.jpg

このSizeConfigはあらゆる場面で汎用的に使えると思うので、Flutter開発者は知っておいて損はないでしょう:relieved:

説明が間違ってりしたら教えてください!

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
kokogento
エストニアの電子国民e-Residencyです。Web制作+開発の自営業→正社員でアプリ開発という経歴です。 〇活を記録するアプリをIonic + Angularで開発し、運営中。アプリについては下記URLを参照。今はFlutterメインでやってます
この記事は以下の記事からリンクされています

コメント

この記事にコメントはありません。
あなたもコメントしてみませんか :)
ユーザー登録
すでにアカウントを持っている方はログイン