일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- Snackbar
- navigator
- Image.network
- sqlite
- Flutter Tutorial
- Flutter 강좌
- Column Widget
- Flutter 예제
- FutureBuilder
- Load Image
- ListView.builder
- 반석천
- AppBar
- Scaffold
- Flutter Example
- CrossAxisAlignment
- Cached Image
- MainAxisAlignment
- listview
- Flutter 앱 배포
- Row
- Hello World
- InkWell
- ListTile
- Networking
- Row Widget
- node.js
- HTTP
- WillPopScope
- flutter
- Today
- Total
꿈꾸는 시스템 디자이너
Flutter 강좌 - [Gesture] InkWell Vs, GestureDetector 본문
Flutter 강좌 목록 : https://here4you.tistory.com/120
지난 강좌에서 InkWell 위젯에 대해 알아봤다. 제스쳐 기능을 제공하지 않는 위젯(컨테이너 등)을 InkWell 위젯으로 감싸면 onTap() 등의 기능을 이용할 수 있다. 추가로 InkWell 위젯을 탭하면 애니메이션 효과가 발생한다.
이와 유사하게 제스쳐 기능을 제공하지 않는 위젯에 제스쳐 기능을 제공하는 래핑 위젯으로 제스쳐디텍터(GestureDetector)가 있다. 사용방법도 거의 유사하다.
우선 소스코드를 살펴보자.
import 'package:flutter/material.dart';
void main() => runApp(MyApp());
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final title = "InkWell Demo";
return MaterialApp(title: title, home: MyHomePage(title: title));
}
}
class MyHomePage extends StatelessWidget {
final String title;
MyHomePage({Key key, @required this.title}) : super(key: key);
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(title: Text(title)),
body: Center(child: MyButton()),
);
}
}
/** InkWell 위젯
* Container와 같이 제스쳐기능을 제공하지 않는 위젯을 래핑하여 onTap 기능 제공
* InkWell 위젯을 탭하면 물결모양의 애니메이션 효과가 발생함
*/
class MyButton extends StatelessWidget {
@override
Widget build(BuildContext context) {
// InkWell 위젯 or Gesture 위젯
//return InkWell(
return GestureDetector(
child: Container(
padding: EdgeInsets.all(12.0),
child: Text('Flat Button'),
// 일반 컨테이너 텍스트를 버튼처럼 꾸며줌
decoration: BoxDecoration(
// 테마의 버튼 컬러로 설정
color: Theme.of(context).buttonColor,
// 텍스트 외각을 버튼처럼 둥글게 처리
borderRadius: BorderRadius.circular(8.0)),
),
onTap: () {
Scaffold.of(context).showSnackBar(SnackBar(content: Text('Tap')));
},
);
}
}
지난 강좌의 거의 유사한 코드이며, MyButton 클래스의 build 메소드에서 반환되는 위젯이 InkWell에서 GestureDetector로만 변경되었다.
두 위젯의 차이점은 다음과 같다.
InkWell의 경우 onTap(). onDoubleTap() 등 자주 쓰이는 제스쳐 기능 몇가지만 제공한다. 하지만 GestureDetector의 다양한 Drag 제스쳐를 포함하여 모든 제스쳐 기능을 제공한다. GestureDetector를 이용하면 보다 상세한 제스쳐 제어가 가능하다는 뜻이다.
또 한가지 차이점은, GestureDetector의 경우 InkWell과 달리 Ripple Animation이라고 하는 물결이 퍼저나가는 모양의 애니메이션을 제공하지 않는다. 순수하게 제스쳐를 제어하는 기능에 충실하다 볼 수 있다.
본 강좌는 Flutter 공식 사이트의 문서를 참고하여 작성되었습니다.
Flutter Code Examples 강좌를 추천합니다.
- 제 블로그에서 Flutter Code Examples 프로젝트를 시작합니다.
- Flutter의 다양한 예제를 소스코드와 실행화면으로 제공합니다.
- 또한 모든 예제는 Flutter Code Examples 앱을 통해 테스트 가능합니다.
Flutter Code Examples 강좌로 메뉴로 이동
'Development > Flutter' 카테고리의 다른 글
Flutter 강좌 - [Image] 인터넷의 이미지를 출력하는 방법 (0) | 2019.07.04 |
---|---|
Flutter 강좌 - [Gesture] ListView에서 Swipe와 Dismiss 구현 (1) | 2019.07.03 |
Flutter 강좌 - [Gesture] InkWell 위젯 사용법 (0) | 2019.07.03 |
Flutter 강좌 - [Form] 텍스트필드 값 확인하기 (6) | 2019.07.03 |
Flutter 강좌 - [Form] 텍스트필드의 변화를 핸들링하는 방법 (2) | 2019.07.03 |