【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part21 Single-child layout widgets

基礎 から 学ぶ Flutter 」という書籍で  学習 したことを ブログでアウトプットしていこうと思います。今回は ウィジェット編 ( part21 )です。

前回

【 Flutter 】Flutter を 基礎 から 学習 ( ウィジェット編 ) part20 Single-child layout widgets

引き続き、Single-child layout widgetsについて学びます。

Single-child layout widgets

Containerウィジェット

padding・marginプロパティ

paddingプロパティは自身とchildプロパティとの間隔を指定するプロパティのようです。
marginは自身と外側の領域の間隔を指定するものです。
考え方はHTMLのそれと同じようです。

paddingプロパティ
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new MyApp()));
}

var ok = false;

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    var mediaQuery = MediaQuery.of(context);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('テスト中です。'),
        ),
        body: Column(children: <Widget>[
          Container(
            // 枠の上下左右全ての方向に同じ余白を作ります。
            padding: EdgeInsets.all(50),
            child: Text(
              'Paddingあり',
              style: TextStyle(backgroundColor: Colors.orange),
            ),
            height: 200,
            width: 200,
            color: Colors.greenAccent,
          ),
          Container(
            child: Text(
              'Padding無し',
              style: TextStyle(backgroundColor: Colors.orange),
            ),
            height: 200,
            width: 200,
            color: Colors.redAccent,
          ),
        ]),
      ),
    );
  }
}

結果です。

marginプロパティ

続いてmarginプロパティです。

import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';

void main() {
  runApp(new MaterialApp(home: new MyApp()));
}

var ok = false;

class MyApp extends StatefulWidget {
  @override
  State<StatefulWidget> createState() {
    return _State();
  }
}

class _State extends State<MyApp> {
  @override
  Widget build(BuildContext context) {
    var mediaQuery = MediaQuery.of(context);

    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: Text('テスト中です。'),
        ),
        body: Column(children: <Widget>[
          Container(
            child: Container(
                child: Text(
                  'Marginあり',
                  style: TextStyle(backgroundColor: Colors.orange),
                ),
                margin: EdgeInsets.all(8.0),
                color: Colors.black),
            height: 200,
            width: 200,
            color: Colors.greenAccent,
          ),
          Container(
            child: Container(
              child: Text(
                'Margin無し',
                style: TextStyle(backgroundColor: Colors.orange),
              ),
              color: Colors.black,
            ),
            height: 200,
            width: 200,
            color: Colors.redAccent,
          ),
        ]),
      ),
    );
  }
}

結果です。marginを指定しなかったウィジェットでは、childで指定したContainerが親ウィジェットのサイズいっぱいに広がっていることがわかりました。

最後に

HTMLでも同じでした。paddingとmarginの関係はなかなか理解が進まないです。

paddingプロパティはPaddingウィジェットをが代替です。
marginプロパティは代替は無い・・・でよいのですかね?EdgeInsetsクラスでマージンをしてするしかないみたいです。

今日はここまで!

参考

CSS入門:marginとpaddingの違いと使い分け | サービス | プロエンジニア (internous.co.jp)

【Flutter】paddingプロパティの使い方|EdgeInsets (flutternyumon.com)