Notice
Recent Posts
Recent Comments
Link
drexqq
[Flutter] 플러터 GestureDetector, InkWell 본문
728x90
반응형
InkWell과 GestureDetector 위젯은 사용자의 동작을 감지할 수 있는 위젯입니다.
onTap, onDoubleTap 등 여러가지 동작들을 감지해서 유저와 상호작용이 가능합니다.
더 많은 액션들은 공식 홈페이지에 나와있습니다.
[InkWell]
https://api.flutter.dev/flutter/material/InkWell-class.html
예제
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return MaterialApp(
title: _title,
home: Scaffold(
appBar: AppBar(title: const Text(_title)),
body: const Center(
child: MyStatefulWidget(),
),
),
);
}
}
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({super.key});
@override
State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
double sideLength = 50;
@override
Widget build(BuildContext context) {
return AnimatedContainer(
height: sideLength,
width: sideLength,
duration: const Duration(seconds: 2),
curve: Curves.easeIn,
child: Material(
color: Colors.yellow,
child: InkWell(
onTap: () {
setState(() {
sideLength == 50 ? sideLength = 100 : sideLength = 50;
});
},
),
),
);
}
}
[GestureDetector]
https://api.flutter.dev/flutter/widgets/GestureDetector-class.html
예제
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
static const String _title = 'Flutter Code Sample';
@override
Widget build(BuildContext context) {
return const MaterialApp(
title: _title,
home: MyStatefulWidget(),
);
}
}
class MyStatefulWidget extends StatefulWidget {
const MyStatefulWidget({super.key});
@override
State<MyStatefulWidget> createState() => _MyStatefulWidgetState();
}
class _MyStatefulWidgetState extends State<MyStatefulWidget> {
bool _lightIsOn = false;
@override
Widget build(BuildContext context) {
return Scaffold(
body: Container(
alignment: FractionalOffset.center,
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Padding(
padding: const EdgeInsets.all(8.0),
child: Icon(
Icons.lightbulb_outline,
color: _lightIsOn ? Colors.yellow.shade600 : Colors.black,
size: 60,
),
),
GestureDetector(
onTap: () {
setState(() {
// Toggle light when tapped.
_lightIsOn = !_lightIsOn;
});
},
child: Container(
color: Colors.yellow.shade600,
padding: const EdgeInsets.all(8),
// Change button text when light changes state.
child: Text(_lightIsOn ? 'TURN LIGHT OFF' : 'TURN LIGHT ON'),
),
),
],
),
),
);
}
}
InkWell과 GestureDetector의 차이는 InkWell은 제스처를 감지했을 경우 잉크가 퍼지는 것과 비슷한 애니메이션 효과가 기본값으로 들어가있지만 GestureDetector는 애니메이션 효과가 없습니다 !
또한 InkWell보다 GestureDetector에 더 다양한 제스처를 감지할 수 있는 액션들이 많으니 상황에 따라서 사용하면 될 것 같습니다.
728x90
반응형
'Mobile > Flutter' 카테고리의 다른 글
[Flutter] 플러터 final vs const (0) | 2022.11.15 |
---|---|
[Flutter] 플러터 ListView (0) | 2022.11.15 |
[Flutter] 플러터 primarySwatch, primaryColor (0) | 2022.11.15 |
[Flutter] 플러터 StatelessWidget, StatefulWidget (0) | 2022.11.15 |
[Flutter] macbook air m2 플러터설치하기 (0) | 2022.11.09 |
Comments