반응형
GestureDetector에 Button을 추가 할 경우 발생하는 문제
GestureDetector에 button을 추가할 경우 onPressed가 동작하지 않는 문제가 발생할 수 있습니다. 그 이유는 두 위젯 모두 탭 이벤트를 처리하기 때문입니다. 그래서 일반적으로 Button 내부에 GestureDetector를 사용하거나 반대로 GestureDetector 내부에 FilledButton을 사용하는 것은 권장되지 않습니다. 이는 이벤트 처리에서 충돌이 발생할 수 있기 때문입니다.
하지만 언제나 그렇듯이 원치안도 해야하는 경우가 발생하는데요. 그럴경우 처리방법에 대하여 알아보겠습니다.
방법 1: GestureDetector의 이벤트를 사용하지 않기
GestureDetector에서 onTap 같은 이벤트를 사용하지 않고, 오직 Button의 onPressed만을 사용하는 경우입니다. 이 방법은 FilledButton의 기능을 그대로 유지하면서, 추가적인 레이아웃이나 스타일링 옵션을 GestureDetector를 통해 적용하고 싶을 때 유용할 수 있습니다.
GestureDetector(
child: FilledButton(
onPressed: () {
// 버튼 로직
print("FilledButton pressed");
},
child: Text("Press Me"),
),
)
다만 이경우에는 GestureDetector를 사용하려는 목적인 onTap을 사용하지 않기 때문에 사실상 의미없는 사용방법입니다.
방법 2: IgnorePointer 사용
IgnorePointer 위젯을 GestureDetector 주변에 사용하여 Button으로의 이벤트 전달을 방지할 수 있습니다. 이 방법은 GestureDetector 내부에서 특정 동작을 감지하고 싶지만, 그 내부의 Button에는 영향을 주고 싶지 않을 때 사용할 수 있습니다.
GestureDetector(
onTap: () {
// GestureDetector 로직
print("GestureDetector tapped");
},
child: IgnorePointer(
child: FilledButton(
onPressed: () {
// 이 부분은 실행되지 않음
print("FilledButton pressed");
},
child: Text("Press Me"),
),
),
)
반응형
'2023년 부터 > Flutter' 카테고리의 다른 글
[Flutter] ListView 스크롤 문제와 A RenderFlex overflowed by pixels on the bottom. 와 같은 픽셀이 초과 현상 (0) | 2024.03.26 |
---|---|
[Flutter]Animation활용 (0) | 2024.03.26 |
[Flutter] 버그 & 이슈(The following assertion was thrown building Scaffold(dirty, state: ScaffoldState#5a617(tickers: tracking 2 tickers)):No Directionality widget found.) (0) | 2024.03.26 |
Dart - 믹스인(mixin) (0) | 2023.10.19 |
Dart - 클래스와 객체 (0) | 2023.10.19 |