`Stack`은 Flutter에서 여러 위젯을 서로 겹쳐서 배치할 수 있게 해주는 위젯입니다. `Stack`은 기본적으로 자식 위젯을 겹쳐서 쌓아 올리며, 각 위젯의 위치를 `Positioned` 위젯을 사용하여 조정할 수 있습니다. `Stack`은 Z축을 따라 자식 위젯을 배치하며, 첫 번째 자식이 가장 아래에, 마지막 자식이 가장 위에 위치하게 됩니다.
주요 속성
– alignment: `Stack` 내에서 자식 위젯들의 기본 정렬을 설정합니다. 기본값은 `Alignment.topLeft`입니다.
– children: `Stack`에 추가할 자식 위젯들의 목록을 설정합니다.
– fit: 자식 위젯의 크기를 설정하는 방법을 정의합니다. `StackFit.loose`(기본값)과 `StackFit.expand`가 있습니다.
– overflow: `Stack`의 영역을 벗어난 자식 위젯을 어떻게 처리할지 설정합니다. `Overflow.clip`(기본값)과 `Overflow.visible`이 있습니다.
주요 사용 예제
기본 Stack 사용
`Stack`을 사용하여 여러 위젯을 겹쳐 배치하는 간단한 예제입니다.
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Flutter Stack Example'), ), body: Stack( children: <Widget>[ Container( width: 200, height: 200, color: Colors.red, ), Container( width: 150, height: 150, color: Colors.green, ), Container( width: 100, height: 100, color: Colors.blue, ), ], ), ), ); } }
Positioned 위젯 사용
`Positioned` 위젯을 사용하여 `Stack` 내에서 각 자식의 위치를 지정하는 예제입니다.
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Flutter Positioned Example'), ), body: Stack( children: <Widget>[ Container( width: 300, height: 300, color: Colors.red, ), Positioned( left: 50, top: 50, child: Container( width: 200, height: 200, color: Colors.green, ), ), Positioned( right: 30, bottom: 30, child: Container( width: 100, height: 100, color: Colors.blue, ), ), ], ), ), ); } }
코드 설명
– 기본 Stack 사용:
– `Stack`의 `children` 속성에 `Container` 위젯을 여러 개 지정하여 겹쳐 배치합니다.
– 각 `Container`는 크기와 색상이 다르게 설정되어 있습니다.
– 순서대로 빨간색, 초록색, 파란색 `Container`가 겹쳐져서 배치됩니다.
– Positioned 위젯 사용:
– `Positioned` 위젯을 사용하여 `Stack` 내에서 자식 위젯의 위치를 지정합니다.
– 첫 번째 `Container`는 전체 크기를 차지하는 빨간색 박스입니다.
– 두 번째 `Container`는 `left`와 `top` 속성을 사용하여 왼쪽 상단에서 50픽셀 떨어진 위치에 초록색 박스를 배치합니다.
– 세 번째 `Container`는 `right`와 `bottom` 속성을 사용하여 오른쪽 하단에서 30픽셀 떨어진 위치에 파란색 박스를 배치합니다.
고급 예제
`Stack`과 `Align` 위젯을 사용하여 자식 위젯을 상대적으로 배치하는 예제입니다.
import 'package:flutter/material.dart'; void main() { runApp(MyApp()); } class MyApp extends StatelessWidget { @override Widget build(BuildContext context) { return MaterialApp( home: Scaffold( appBar: AppBar( title: Text('Flutter Stack and Align Example'), ), body: Stack( children: <Widget>[ Align( alignment: Alignment.topLeft, child: Container( width: 100, height: 100, color: Colors.red, ), ), Align( alignment: Alignment.center, child: Container( width: 100, height: 100, color: Colors.green, ), ), Align( alignment: Alignment.bottomRight, child: Container( width: 100, height: 100, color: Colors.blue, ), ), ], ), ), ); } }
코드 설명
– Align 위젯 사용:
– `Align` 위젯을 사용하여 `Stack` 내에서 자식 위젯을 상대적으로 배치합니다.
– `alignment` 속성을 사용하여 자식 위젯의 정렬 위치를 지정합니다.
– 첫 번째 `Container`는 `Alignment.topLeft`로 설정되어 왼쪽 상단에 빨간색 박스를 배치합니다.
– 두 번째 `Container`는 `Alignment.center`로 설정되어 중앙에 초록색 박스를 배치합니다.
– 세 번째 `Container`는 `Alignment.bottomRight`로 설정되어 오른쪽 하단에 파란색 박스를 배치합니다.
`Stack`은 Flutter에서 위젯을 겹쳐서 배치할 때 매우 유용하게 사용할 수 있는 위젯입니다. `Positioned`와 `Align` 같은 위젯을 함께 사용하면 더 정밀하게 자식 위젯의 위치를 조정할 수 있습니다.