반응형

들어가며

Column/Row 위젯이란?

  • Column과 Row 위젯은 각각 수직 방향과 수평 방향으로 자식 위젯을 배치하는 데 사용된다.
  • 다른 위젯을 배열하여 복잡한 레이아웃을 만드는 데 사용된다.

ColumnRow 속성

  • mainAxisAlignment: 자식 위젯이 주축(main axis)을 따라 정렬될 때 사용되는 방법을 지정
    • MainAxisAlignment.start: 주축의 시작 부분에 정렬
    • MainAxisAlignment.center: 주축의 중앙에 정렬
    • MainAxisAlignment.end: 주축의 끝 부분에 정렬
    • MainAxisAlignment.spaceEvenly: 자식 위젯 사이에 동일한 간격을 유지하면서 공간을 균등하게 분배
    • MainAxisAlignment.spaceBetween: 첫 번째와 마지막 자식 위젯은 컨테이너의 시작 부분과 끝 부분에 분산되고, 중간의 자식 위젯들은 균일하게 분산
    • MainAxisAlignment.spaceAround: 모든 자식 위젯 주위에 공간을 균등하게 분배하며, 컨테이너의 시작 부분과 끝 부분에는 절반의 공간이 배정
  • crossAxisAlignment: 자식 위젯이 교차축(cross axis)을 따라 정렬될 때 사용되는 방법을 지정
    • CrossAxisAlignment.start: 교차축의 시작 부분에 정렬
    • CrossAxisAlignment.center: 교차축의 중앙에 정렬
    • CrossAxisAlignment.end: 교차축의 끝 부분에 정렬
    • CrossAxisAlignment.stretch: 자식 위젯이 교차축을 따라 확장
  • mainAxisSize: 주축(main axis)의 크기를 결정하는 방법을 지정
    • MainAxisSize.min: 자식 위젯들이 최소한의 공간을 차지
    • MainAxisSize.max: 주축의 최대 가능한 공간을 사용

예제

main.dart

import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Column and Row Example',
      home: Scaffold(
        appBar: AppBar(
          title: Text('Column and Row Example'),
        ),
        body: Center(
          child: Column(
            // 영역 내에서 가운데 배치
            // mainAxisAlignment: MainAxisAlignment.center,

            // 영역 내에서 자식들간 동일한 간격으로 배치
            // mainAxisAlignment: MainAxisAlignment.spaceBetween,

            // 영역 자체를 컨텐츠 사이즈만큼 최소화
            // mainAxisSize: MainAxisSize.min,

            // 자식 정렬 순서
            // verticalDirection: VerticalDirection.up,

            // 오른쪽 정렬
            // crossAxisAlignment: CrossAxisAlignment.end,

            // 자식들 사이즈를 가로방향으로 꽉 채우고싶으면 아래설정 + 자식들의 width 설정 제거
            // crossAxisAlignment: CrossAxisAlignment.stretch,

            children: [
              Container(
                width: 100,
                height: 100,
                color: Colors.white,
                child: Text('Container 1'),
              ),
              Container(
                width: 200,
                height: 100,
                color: Colors.blue,
                child: Text('Container 2'),
              ),
              Divider(
                height: 60.0,
                color: Colors.grey[850],
                thickness: 0.5,
                indent: 30.0,
                endIndent: 30.0,
              ),
              Container(
                width: 100,
                height: 100,
                color: Colors.red,
                child: Text('Container 3'),
              ),
              SizedBox(
                height: 30.0,
              ),
              Container(
                width: double.infinity,
                height: 20,
                color: Colors.teal,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

화면

반응형

'Development > Flutter' 카테고리의 다른 글

[Flutter] Image  (0) 2024.02.18
[Flutter] ListView/ListTile  (0) 2024.02.18
[Flutter] Container  (0) 2024.02.18
[Flutter] Icon  (0) 2024.02.18
[Flutter] Button  (1) 2024.02.18

+ Recent posts