
Flutter 앱 개발에서는 사용자의 터치와 제스처를 인식해 반응하는 기능이 중요하다.
이때 사용하는 위젯이 바로 GestureDetector이다.
GestureDetector는 터치, 스와이프, 탭, 드래그와 같은 다양한 제스처를 감지하고, 이에 따라 원하는 동작을 수행할 수 있게 해준다.
이번 글에서는 GestureDetector의 기능과 사용법, 다양한 속성들에 대해 자세히 살펴보고, 실제 예제를 통해 이해해 보겠다.
GestureDetector는 Flutter에서 제스처를 감지하기 위한 위젯이다.
사용자의 입력(터치, 탭, 스와이프 등)을 감지하고 이를 처리할 수 있도록 한다.
GestureDetector는 기본적으로 보이지 않는 위젯이며, 감지할 수 있는 영역 내에서 발생하는 제스처 이벤트를 트리거한다.
GestureDetector는 다양한 속성을 통해 여러 종류의 제스처를 감지할 수 있다. 다음은 주요 속성들이다.
onTap: 사용자가 위젯을 한 번 탭했을 때 호출된다.onDoubleTap: 위젯을 빠르게 두 번 탭했을 때 호출된다.onLongPress: 사용자가 위젯을 길게 눌렀을 때 호출된다.onPanUpdate: 드래그 동작을 감지하며, 드래그 위치가 변경될 때마다 호출된다.onHorizontalDrag, onVerticalDrag: 수평 또는 수직 방향으로 드래그할 때 호출된다.등등 더욱 많다
기본적인 GestureDetector 사용 예제는 다음과 같다. 이 예제에서는 탭과 길게 누르기를 감지하여 다른 동작을 수행한다.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(title: Text('GestureDetector Example')),
body: Center(
child: GestureDetector(
onTap: () {
print('Tapped!');
},
onLongPress: () {
print('Long Pressed!');
},
child: Container(
width: 200,
height: 200,
color: Colors.blue,
child: Center(child: Text('Tap or Long Press')),
),
),
),
),
);
}
}
onTap 속성은 사용자가 위젯을 탭했을 때 호출된다.onLongPress 속성은 위젯을 길게 눌렀을 때 호출된다.Container를 사용하여 시각적으로 나타내며, 사용자가 상호작용할 수 있는 대상이 된다.GestureDetector는 탭과 길게 누르기 외에도 다양한 제스처를 감지할 수 있다. 예를 들어, 스와이프 동작이나 드래그 동작을 감지하려면 다음과 같이 사용할 수 있다.
GestureDetector(
onHorizontalDragUpdate: (details) {
print('Horizontal Drag detected: ${details.localPosition}');
},
onVerticalDragUpdate: (details) {
print('Vertical Drag detected: ${details.localPosition}');
},
child: Container(
width: 200,
height: 200,
color: Colors.green,
child: Center(child: Text('Drag me')),
),
)
onHorizontalDragUpdate와 onVerticalDragUpdate 속성을 통해 각각 수평 및 수직 드래그 동작을 감지한다.GestureDetector는 Flutter에서 사용자 입력과 제스처를 감지하고 처리하는 데 매우 유용한 위젯이다.
탭, 드래그, 스와이프 같은 상호작용을 쉽게 구현할 수 있으며, 다양한 속성을 통해 강력한 제스처 기능을 제공한다.
앱에서 사용자 경험을 향상시키기 위해 GestureDetector를 적극적으로 활용하는 것이 좋다.