카테고리 없음
[flutter] Guesture Widget(제스처 위젯)의 종류
STUFIT
2025. 2. 21. 07:00
반응형
1. Flutter에서 Gesture를 지원하는 주요 위젯
Flutter에서 제스처를 감지하고 활용할 수 있는 주요 위젯들은 다음과 같습니다:
위젯 설명
GestureDetector | 터치 이벤트(탭, 드래그, 스와이프 등)를 감지하는 기본 위젯 |
InkWell | 머터리얼 디자인 효과를 포함한 터치 감지 위젯 |
ElevatedButton, TextButton, IconButton | 기본적인 버튼 클릭 감지 위젯 |
Dismissible | 스와이프하여 항목을 삭제할 수 있는 위젯 |
Draggable & DragTarget | 드래그 앤 드롭을 지원하는 위젯 |
Slider | 사용자가 슬라이드를 통해 값을 조정할 수 있는 위젯 |
Switch | ON/OFF 상태를 전환하는 위젯 |
PopupMenuButton | 롱프레스 또는 탭으로 메뉴를 표시하는 위젯 |
ListView (scroll detection) | 스크롤 동작을 감지할 수 있는 위젯 |
이제 각 위젯의 역할과 예제, 그리고 옵션들에 대해 자세히 살펴보겠습니다.
2. GestureDetector (가장 기본적인 제스처 감지 위젯)
GestureDetector는 탭, 더블탭, 롱프레스, 드래그 등 다양한 터치 이벤트를 감지하는 위젯입니다.
GestureDetector(
onTap: () {
print("화면이 탭되었습니다!");
},
onDoubleTap: () {
print("더블탭 이벤트 발생!");
},
onLongPress: () {
print("롱프레스 이벤트 발생!");
},
onPanUpdate: (details) {
print("드래그 중: ${details.delta}");
},
child: Container(
width: 100,
height: 100,
color: Colors.blue,
child: Center(child: Text("탭!")),
),
)
주요 옵션
- onTap: 화면이 탭되었을 때 실행되는 콜백 함수
- onDoubleTap: 두 번 빠르게 탭할 때 실행되는 콜백 함수
- onLongPress: 길게 누를 때 실행되는 콜백 함수
- onPanStart: 드래그 시작 시 실행되는 콜백 함수
- onPanUpdate: 드래그 중 위치 업데이트 감지
- onPanEnd: 드래그 종료 시 실행되는 콜백 함수
- behavior: 이벤트가 전달되는 방식 설정 (HitTestBehavior.opaque 사용 가능)
3. InkWell (머터리얼 디자인 터치 효과 포함)
InkWell은 머터리얼 디자인의 물결(Wave) 효과가 포함된 터치 감지 위젯입니다.
InkWell(
onTap: () {
print("InkWell 탭 이벤트 발생!");
},
splashColor: Colors.red,
highlightColor: Colors.yellow,
borderRadius: BorderRadius.circular(8.0),
child: Container(
width: 100,
height: 100,
child: Center(child: Text("InkWell!")),
),
)
주요 옵션
- splashColor: 터치 시 퍼지는 효과 색상 지정
- highlightColor: 터치 시 하이라이트 색상 지정
- borderRadius: 터치 효과의 테두리 모양 설정 가능
- onTap: 클릭 이벤트 감지
- onLongPress: 롱프레스 감지
4. 버튼 계열 (ElevatedButton, TextButton, IconButton)
Flutter의 버튼 계열 위젯들은 터치 이벤트를 감지하여 UI를 반응시킬 수 있습니다.
ElevatedButton(
onPressed: () {
print("버튼 클릭!");
},
onLongPress: () {
print("롱프레스 이벤트 발생!");
},
style: ElevatedButton.styleFrom(
primary: Colors.green,
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.circular(12),
),
),
child: Text("클릭!"),
)
주요 옵션
- onPressed: 버튼 클릭 이벤트
- onLongPress: 길게 눌렀을 때 이벤트
- style: 버튼의 색상, 그림자, 모양 등을 설정
5. Dismissible (스와이프하여 삭제)
Dismissible은 사용자가 왼쪽 또는 오른쪽으로 스와이프하여 항목을 삭제하는 기능을 제공합니다.
Dismissible(
key: UniqueKey(),
onDismissed: (direction) {
print("아이템 삭제됨!");
},
background: Container(color: Colors.red),
secondaryBackground: Container(color: Colors.blue),
direction: DismissDirection.horizontal,
child: ListTile(title: Text("스와이프하세요!")),
)
주요 옵션
- onDismissed: 삭제 이벤트 실행
- direction: 스와이프 방향 설정 가능 (DismissDirection.horizontal, DismissDirection.vertical)
- background: 삭제 시 배경으로 표시할 위젯
- secondaryBackground: 반대 방향 스와이프 시 배경
6. Draggable & DragTarget (드래그 앤 드롭 지원)
Flutter에서 드래그 앤 드롭을 구현할 때 사용하는 위젯입니다.
Draggable(
data: "드래그 데이터",
feedback: Container(
width: 50,
height: 50,
color: Colors.red,
child: Center(child: Text("드래그 중")),
),
child: Container(
width: 100,
height: 100,
color: Colors.blue,
child: Center(child: Text("드래그!")),
),
)
주요 옵션
- data: 드래그할 데이터 값
- feedback: 드래그 중 표시할 UI
- childWhenDragging: 드래그 중 원래 위치에서 보여줄 UI
- onDragCompleted: 드래그가 완료되었을 때 호출
- onDraggableCanceled: 드래그가 취소되었을 때 호출
7. Slider (드래그하여 값 조정)
Slider는 사용자가 드래그하여 값을 조정할 수 있는 UI 위젯입니다.
Slider(
value: 50,
min: 0,
max: 100,
divisions: 10,
label: "현재 값: 50",
onChanged: (newValue) {
print("슬라이더 값: $newValue");
},
)
주요 옵션
- value: 현재 값
- onChanged: 값 변경 이벤트
- min / max: 최소/최대 값 설정
- divisions: 값 조정 간격 설정
- label: 슬라이더 값 표시
8. Switch (ON/OFF 전환)
Switch(
value: true,
activeColor: Colors.green,
inactiveThumbColor: Colors.grey,
onChanged: (value) {
print("스위치 상태: $value");
},
)
주요 옵션
- value: 현재 상태 값
- onChanged: 상태 변경 이벤트
- activeColor: ON 상태일 때 색상
- inactiveThumbColor: OFF 상태일 때 스위치 색상
반응형