GestureDetector 위젯
GestureDetector 위젯은 Flitter에서 사용자 상호작용을 처리하는 주요 방법입니다. 자식 위젯을 감싸고 다양한 제스처와 마우스 이벤트를 감지합니다.
지원하는 제스처
클릭 제스처
onClick
: 클릭 이벤트 처리
GestureDetector({
onClick: () => console.log("클릭됨"),
child: /* widget */
})
마우스 이벤트
onMouseDown
: 마우스 버튼이 눌렸을 때onMouseMove
: 마우스가 이동할 때onMouseUp
: 마우스 버튼이 떼어질 때onMouseOver
: 마우스가 위젯 위에 있을 때onMouseEnter
: 마우스가 위젯에 들어올 때onMouseLeave
: 마우스가 위젯을 떠날 때
GestureDetector({
onMouseDown: (e) => console.log("마우스 다운", e),
onMouseMove: (e) => console.log("마우스 이동", e),
onMouseUp: (e) => console.log("마우스 업", e),
onMouseEnter: (e) => console.log("마우스 진입", e),
onMouseLeave: (e) => console.log("마우스 이탈", e),
child: /* widget */
})
드래그 제스처
onDragStart
: 드래그 시작 시onDragMove
: 드래그 중onDragEnd
: 드래그 종료 시
GestureDetector({
onDragStart: (e) => console.log("드래그 시작", e),
onDragMove: (e) => console.log("드래그 중", e),
onDragEnd: (e) => console.log("드래그 종료", e),
child: /* widget */
})
휠 이벤트
onWheel
: 마우스 휠 스크롤
GestureDetector({
onWheel: (e) => console.log("휠 이벤트", e),
child: /* widget */
})
사용 가능한 속성
onClick
: (event: MouseEvent) => voidonMouseDown
: (event: MouseEvent) => voidonMouseMove
: (event: MouseEvent) => voidonMouseUp
: (event: MouseEvent) => voidonMouseOver
: (event: MouseEvent) => voidonMouseEnter
: (event: MouseEvent) => voidonMouseLeave
: (event: MouseEvent) => voidonDragStart
: (event: MouseEvent) => voidonDragMove
: (event: MouseEvent) => voidonDragEnd
: (event: MouseEvent) => voidonWheel
: (event: WheelEvent) => voidcursor
: Cursor 타입의 마우스 커서 스타일
커서 타입
위젯 위에 마우스를 올렸을 때 커서를 설정하려면 cursor
속성을 사용하세요:
- “pointer”
- “default”
- “move”
- “text”
- “wait”
- “help”
- “progress”
- “not-allowed”
- “crosshair”
- “grab”
- “grabbing”
- 기타…
예시:
GestureDetector({
cursor: "pointer",
child: /* widget */
})
일반적인 사용 사례
대화형 버튼
GestureDetector({
onClick: handleClick,
child: CustomButton(),
});
드래그 가능한 항목
GestureDetector({
onDragStart: handleDragStart,
onDragMove: handleDragMove,
onDragEnd: handleDragEnd,
child: DraggableItem(),
});
마우스 상호작용
GestureDetector({
onMouseEnter: handleMouseEnter,
onMouseLeave: handleMouseLeave,
child: HoverableWidget(),
});
모범 사례
상태 관리
- 상태 관리를 위해 StatefulWidget과 setState 사용
- 불필요한 재렌더링을 피하기 위해 상태 변경 최소화
이벤트 처리
- 다양한 상호작용에 적절한 이벤트 핸들러 사용
- 이벤트 버블링을 방지하기 위해 필요한 경우 event.stopPropagation() 사용
성능
- 이벤트 핸들러에서 무거운 계산 피하기
- 필요한 경우 성능 최적화를 위해 requestAnimationFrame 사용
팁과 요령
커스텀 커서
- 사용자에게 시각적 피드백을 제공하기 위해 cursor 속성 활용
이벤트 전파
- event.stopPropagation()과 event.preventDefault()를 사용하여 이벤트 버블링 제어
디버깅
- 이벤트 데이터를 검사하기 위해 이벤트 핸들러에서 console.log 사용