Flutter + Dart/Flutter + Dart 공부

위젯 정렬 - 전체 채우기, 좌측 상단 정렬

GREEN나무 2025. 5. 19. 13:01
728x90

 

📌 Flutter에서 자식 위젯을 "전체 확장 + 좌측 상단 정렬"하는 방법 총정리

Flutter에서 자식 위젯을 부모 위젯의 전체 크기를 채우면서, 동시에 좌측 상단에 정렬시키려면 다음과 같은 위젯과 속성들을 적절히 조합해야 합니다.


✅ 자식 위젯이 부모 영역을 가득 채우는 방법

위젯/속성 용도 설명 예시
SizedBox.expand() 전체 확장 부모의 최대 크기로 확장 child: SizedBox.expand(child: ...)
Container 전체 확장 width/height를 double.infinity로 설정 Container(width: double.infinity, height: double.infinity, child: ...)
Expanded Row, Column에서 확장 주축 방향 전체 공간 차지 Row(children: [Expanded(child: ...)])
Flexible Row, Column에서 유연한 확장 Expanded보다 유연 Flexible(fit: FlexFit.tight, child: ...)
crossAxisAlignment: CrossAxisAlignment.stretch 교차축 확장 Column/Row 내 자식들을 교차축 방향으로 확장 Column(crossAxisAlignment: CrossAxisAlignment.stretch, children: [...])

✅ 자식 위젯을 좌측 상단 정렬하는 방법

위젯/속성 용도 설명 예시
Align 정렬 위치 지정 alignment: Alignment.topLeft로 좌측 상단 위치 Align(alignment: Alignment.topLeft, child: ...)
Container 내부 정렬 alignment: Alignment.topLeft 사용 가능 Container(alignment: Alignment.topLeft, child: ...)
Stack + Positioned 절대 위치 배치 좌측 상단에 정밀 배치 Stack(children: [Positioned(top: 0, left: 0, child: ...)])
Column / Row 기본 동작 기본 좌상단 시작 별도 정렬 지정 없으면 자동 좌측 상단 시작 Column(children: [...])

🧩 조합 예시: 전체 확장 + 좌측 상단 정렬

import 'package:flutter/material.dart';

class FullSizeTopLeftWidget extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      body: SizedBox.expand(
        child: Align(
          alignment: Alignment.topLeft,
          child: Container(
            width: 100,
            height: 100,
            color: Colors.blue,
            child: Text('좌측 상단'),
          ),
        ),
      ),
    );
  }
}

📎 설명:

  • SizedBox.expand: 부모 영역 전체 사용
  • Align(alignment: Alignment.topLeft): 자식을 좌상단에 정렬
  • Container: 테스트용 사각형 영역

🔍 추가 팁

항목 용도 예시
MainAxisAlignment Row/Column 내 주축 정렬 mainAxisAlignment: MainAxisAlignment.start
CrossAxisAlignment 교차축 정렬 crossAxisAlignment: CrossAxisAlignment.start
Spacer, SizedBox 간격 확보 SizedBox(height: 20)
LayoutBuilder 부모 크기에 따른 반응형 레이아웃 LayoutBuilder(builder: (context, constraints) => ...)

필요 시 Row/Column 내에서 정렬하거나, Stack과 Positioned로 절대 위치를 잡아 정밀 제어하는 것도 고려하세요.