Expanded 위젯
Row 또는 Column 위젯에서 사용가능한 공간을 채우는 데 주로 사용되는 위젯
하위 위젯간의 레이아웃 설정 과정에서 사용가능한 모든 공간을 차지하도록 하거나, 사용가능한 공간을 재분배 하는데 사용
Row(
children : [
Expanded(
child : Container()
),
...List.generate(
3,
(index) => Container(),
),
],
)
- flex
Row / Column 위젯에서 사용가능한 공간에서의 각각의 Expanded 위젯이 각각의 비율로 공간을 차지하도록 하는 옵션
// 각각 1 : 3 : 2 비율로 공간이 나눠지게 하는 로직
// Coulumn 내에서 사용되었으므로, mainAxis인 세로(height)가 비율로 나눠지게 됨
Column(
children : [
Expanded(
flex : 1,
width : 20,
),
Expanded(
flex : 3,
width : 20,
),
Expanded(
flex : 2,
width : 20,
),
],
)
Stack 위젯
그래픽 프로그램의 레이어와 유사하게 위젯을 서로의 위에 배치하는데(겹치는데) 주로 사용되는 위젯
화면의 특정 위치에 위젯을 배치하게 함으로써 보다 복잡한 레이아웃을 만드는데 사용할 수 있다.
Positioned 위젯
Stack 위젯 내부에 하위 위젯을 배치하는데 사용되는 위젯
Stack 위젯 내부에서 특정 위치에 하위 위젯을 배치하는데 주로 사용된다.
Stack(
children: [
// 원형 아바타 아이콘
const CircleAvatar(
radius: 50,
child: Icon(
Icons.person,
size: 40,
),
),
Positioned(
bottom: 0,
right: 0,
child: Container(
padding: const EdgeInsets.all(7),
decoration: const BoxDecoration(
shape: BoxShape.circle, color: Colors.white),
child: const Icon(
Icons.camera_enhance,
size: 24,
),
),
)
],
),
Stack 위젯 옵션
- fit
Stack 위젯 내에서 자식 위젯의 크기를 조절하는데 사용되는 옵션
Stack(
fit : StackFit.loose, // stack 위젯 내부에서 자식 위젯의 크기 만큼 표현되게 하는 옵션(기본값)
// fit : StackFit.expand, // stack 위젯의 크기와 동일한 크기로 자식 위젯을 확장함
// fit : StackFit.passthrough, // 자식 위젯이 stack위젯을 뚫고 지나갈 수 있게 함
)
- children
Stack 위젯 내에서의 자식 위젯들을 배치하는데 사용하는 옵션
리스트에서 먼저 담긴 위젯이 가장 아래 레이어에 위치하며, 층층이 쌓아가는 구조
Positioned 위젯 옵션
- left, top, right, bottom
각각 위젯의 왼쪽, 위, 오른쪽, 아래의 여백 값을 설정하는 옵션
주의점으로는, left-right / top-bottom 값을 같이 설정할 경우 자식 위젯에서 설정된 사이즈를 무시하고 확장될 수 있으니 주의
Stack(
children: [
Positioned(
left: 0,
top: 0,
child: Container(),
),
],
)
Draggable 위젯
사용자가 드래그하여 다른 위치로 이동 가능한 위젯
Offset _offset = Offset(100, 100); // 초기 위치
Stack(
children: [
Positioned(
left: _offset.dx,
top: _offset.dy,
child: Draggable(
feedback: Container(
width: 100,
height: 100,
color: Colors.blue.withOpacity(0.5),
),
child: Container(
width: 100,
height: 100,
color: Colors.blue,
),
childWhenDragging: Container(), // 드래그 중에는 빈 공간 표시
onDragEnd: (details) {
// 드래그가 끝났을 때의 위치 업데이트
setState(() {
_offset = Offset(
details.offset.dx - 50, // 중심을 맞추기 위해 조정
details.offset.dy - 50,
);
});
},
),
),
],
);
Draggable 위젯 옵션
- feedback
드래그할 때 보여지는 위젯. 일반적으로 원본 위젯을 반투명하게 만들어 표시.
- child
사용자가 드래그하기 전의 상태를 나타냄. (원본 위젯)
- childWhenDragging
사용자가 Draggable 위젯을 드래그 중일 때 원래 위치에 보여질 위젯. 일반적으로 아무것도 설정하지 않는다.
- onDragEnd
드래그가 끝났을 때 호출되는 콜백 함수
'Flutter' 카테고리의 다른 글
예제를 통한 레이아웃 연습 (0) | 2024.10.10 |
---|---|
기능성 위젯 (0) | 2024.10.10 |
Layout 위젯(1) (0) | 2024.10.08 |
View위젯 (2) (0) | 2024.10.08 |
View위젯 (1) (0) | 2024.10.07 |