Flutter의 onPressed와 onTap 차이
onPressed와 onTap은 Flutter에서 터치 이벤트를 처리할 때 사용하는 두 가지 주요 콜백 함수입니다. 둘 다 사용자의 상호작용을 감지하고 특정 동작을 실행하는 데 사용되지만, 사용하는 컨텍스트와 제공하는 기능에 차이가 있습니다.
onPressed
onPressed는 버튼 위젯(예: ElevatedButton
, TextButton
, FloatingActionButton
등)에서 사용되는 콜백 함수입니다. 사용자가 버튼을 눌렀을 때 호출되며, 주로 버튼과 함께 사용됩니다.
onPressed 예시
ElevatedButton(
onPressed: () {
print('버튼이 클릭되었습니다.');
},
child: Text('클릭하세요'),
)
- 사용 용도: 버튼과 같은 위젯에서만 사용 가능
- 주로 사용되는 위젯:
ElevatedButton
, TextButton
, IconButton
등
- 비활성화 가능:
onPressed
속성에 null
을 전달하면 버튼을 비활성화할 수 있음
onTap
onTap은 GestureDetector
또는 InkWell
과 같은 위젯에서 터치 제스처를 처리하기 위해 사용됩니다. onTap
은 단순한 터치뿐만 아니라 다양한 제스처를 처리할 수 있는 기능도 제공합니다.
onTap 예시 (InkWell 사용)
InkWell(
onTap: () {
print('위젯이 터치되었습니다.');
},
child: Container(
padding: EdgeInsets.all(20),
color: Colors.blue,
child: Text('터치하세요'),
),
)
- 사용 용도: 다양한 위젯에 터치 이벤트를 추가할 수 있음 (이미지, 텍스트 등)
- 주로 사용되는 위젯:
GestureDetector
, InkWell
등
- 다양한 제스처 처리:
onDoubleTap
, onLongPress
등 다른 제스처와 함께 사용 가능
onPressed와 onTap의 차이
구분 |
onPressed |
onTap |
사용되는 위젯 |
버튼 위젯 (ElevatedButton , TextButton 등) |
제스처 감지 위젯 (InkWell , GestureDetector ) |
주 사용 목적 |
버튼 클릭 처리 |
위젯의 터치, 더블탭, 길게 누름 등 다양한 제스처 처리 |
제스처 처리 |
단일 터치(클릭)만 처리 |
다양한 제스처 처리 가능 (예: onDoubleTap , onLongPress 등) |
비활성화 여부 |
null 을 설정하여 비활성화 가능 |
비활성화 기능 없음, 제스처 감지 위젯에서는 모든 제스처를 직접 처리 |
결론
Flutter에서 onPressed
와 onTap
은 사용 목적에 따라 다르게 사용됩니다. onPressed
는 버튼과 같은 위젯에 주로 사용되고, onTap
은 다양한 위젯에서 터치 이벤트를 처리하는 데 사용됩니다. 제스처에 더 많은 유연성이 필요할 경우 onTap
과 InkWell
또는 GestureDetector
를 사용하는 것이 좋습니다.