[Flutter] ๐Ÿ‘†GestureDetector์™€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜

novellusยท2024๋…„ 10์›” 11์ผ
0
post-thumbnail

Flutter ์•ฑ์—์„œ ํ„ฐ์น˜ ์ด๋ฒคํŠธ๋ฅผ ์ฒ˜๋ฆฌํ•  ๋•Œ, GestureDetector์™€ ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ์‚ฌ์šฉ์„ ์กฐ์‹ฌํ•ด์•ผ ํ•œ๋‹ค. ํŠนํžˆ ํ•จ์ˆ˜์— ์ธ์ž๊ฐ€ ์žˆ๋Š” ๊ฒฝ์šฐ ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ์ฝœ๋ฐฑ์„ ์„ค์ •ํ•˜์ง€ ์•Š์œผ๋ฉด ์œ„์™€ ๊ฐ™์€ ์—๋Ÿฌ๋ฅผ ๋งˆ์ฃผ์น˜๊ฒŒ ๋œ๋‹ค.


1. ์ฝœ๋ฐฑ ํ•จ์ˆ˜์˜ ๊ฐœ๋…

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋ž€?

์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ํŠน์ • ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •๋œ ํ•จ์ˆ˜๋กœ, Flutter์—์„œ ์ฝœ๋ฐฑ์€ ์ฃผ๋กœ ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํด๋ฆญํ•˜๊ฑฐ๋‚˜ ํ™”๋ฉด์„ ํ„ฐ์น˜ํ•  ๋•Œ ํ˜ธ์ถœ๋œ๋‹ค. ์ด๋Ÿฌํ•œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ ์‹คํ–‰๋˜์ง€ ์•Š์œผ๋ฉฐ, ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ–ˆ์„ ๋•Œ๋งŒ ํ˜ธ์ถœ๋˜๋„๋ก ์„ค์ •๋œ๋‹ค.

GestureDetector(
  onTap: () {
    print("Button tapped!");
  },
  child: Text("Tap me"),
),

์œ„ ์ฝ”๋“œ์—์„œ onTap์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ•ด๋‹น ํ…์ŠคํŠธ๋ฅผ ํด๋ฆญํ–ˆ์„ ๋•Œ๋งŒ ์‹คํ–‰๋˜๋Š” ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋‹ค.


2. ๋ฌธ์ œ์˜ ์›์ธ

์ฆ‰์‹œ ์‹คํ–‰๊ณผ ์ฝœ๋ฐฑ ์ „๋‹ฌ์˜ ์ฐจ์ด

๋‚ด๊ฐ€ ๋งˆ์ฃผ์นœ ๋ฌธ์ œ๋Š” ์•„๋ž˜ ์˜ˆ์‹œ ์ฝ”๋“œ์—์„œ ๋ณด์ด๋“ฏ, ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฆ‰์‹œ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜์–ด ๋ฐœ์ƒํ–ˆ๋‹ค. ์ •ํ™•ํžˆ๋Š” flutter์—์„œ ํ™”๋ฉด์„ build ํ•˜๋Š” ์ค‘์— ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋˜์–ด build ๊ฐ€ ์—ฌ๋Ÿฌ๋ฒˆ ๋ฐœ์ƒํ•˜๋Š” ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•œ ๊ฒƒ์ด๋‹ค.

GestureDetector(
  onTap: onLoginTap(context),  // ์ž˜๋ชป๋œ ์‚ฌ์šฉ
  child: Text("Login"),
),

์œ„์˜ ์ฝ”๋“œ์—์„œ๋Š” onLoginTap(context)๊ฐ€ ์ฆ‰์‹œ ํ˜ธ์ถœ๋˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๊ฐ’์ด onTap์— ์ „๋‹ฌ๋œ๋‹ค. ์ด๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ๋ฒ„ํŠผ์„ ํƒญํ•˜๊ธฐ๋„ ์ „์— ํ•จ์ˆ˜๊ฐ€ ์‹คํ–‰๋˜๋Š” ๋™์ž‘์„ ์œ ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.


3. ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•

์˜ฌ๋ฐ”๋ฅธ ์ฝœ๋ฐฑ ์ „๋‹ฌ ๋ฐฉ์‹

ํ•จ์ˆ˜ ํ˜ธ์ถœ์„ ์ฝœ๋ฐฑ์œผ๋กœ ์ „๋‹ฌํ•˜๋ ค๋ฉด, ๋žŒ๋‹ค ํ‘œํ˜„์‹์ด๋‚˜ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•œ๋‹ค. ์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ํ•จ์ˆ˜๊ฐ€ ์ •์˜๋œ ์‹œ์ ์—์„œ๋Š” ์‹คํ–‰๋˜์ง€ ์•Š๊ณ , ์‚ฌ์šฉ์ž๊ฐ€ ์‹ค์ œ๋กœ ํƒญํ•  ๋•Œ๋งŒ ํ˜ธ์ถœ๋œ๋‹ค.

GestureDetector(
  onTap: () => onLoginTap(context),  // ์˜ฌ๋ฐ”๋ฅธ ์‚ฌ์šฉ
  child: Text("Login"),
),

๋˜๋Š” ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ๋‹ค์Œ๊ณผ ๊ฐ™์ด ์ž‘์„ฑํ•  ์ˆ˜๋„ ์žˆ๋‹ค:

GestureDetector(
  onTap: () {
    onLoginTap(context);  // ์ต๋ช… ํ•จ์ˆ˜ ์‚ฌ์šฉ
  },
  child: Text("Login"),
),

์ด ๋ฐฉ์‹์€ onTap ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ๊นŒ์ง€ onLoginTap(context)๊ฐ€ ํ˜ธ์ถœ๋˜์ง€ ์•Š๋Š”๋‹ค.


4. ์ธ์ž๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜์˜ ๊ฒฝ์šฐ

์ธ์ž๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜ ์ฝœ๋ฐฑ ์ฒ˜๋ฆฌ

๋งŒ์•ฝ ํ•จ์ˆ˜์— ์ธ์ž๊ฐ€ ์—†๋‹ค๋ฉด, ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ์œผ๋กœ ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค . ๋‚˜๋Š” ์ด ๋ถ€๋ถ„์— ๋Œ€ํ•ด ์ธ์ง€ํ•˜๊ณ  ์žˆ์ง€ ์•Š์•„์„œ ์ธ์ž๊ฐ€ ์žˆ๋Š” ํ•จ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ๋•Œ๋„ ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋‚˜ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•˜๋‹ค.

void onLoginTap() {
  print('Login button tapped!');
}

GestureDetector(
  onTap: onLoginTap,  // ์ธ์ž๊ฐ€ ์—†๋Š” ๊ฒฝ์šฐ
  child: Text("Login"),
),

์ด ๊ฒฝ์šฐ์—๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ ์ „๋‹ฌํ•˜๋ฉด ๋˜๊ธฐ ๋•Œ๋ฌธ์— ()๊ฐ€ ํ•„์š” ์—†๋‹ค. Flutter๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ํ•ด๋‹น ํ•จ์ˆ˜๊ฐ€ ํ˜ธ์ถœ๋˜๋„๋ก ์ž๋™์œผ๋กœ ์ฒ˜๋ฆฌํ•œ๋‹ค.


์š”์•ฝ

  • ์ฝœ๋ฐฑ ํ•จ์ˆ˜๋Š” ์ด๋ฒคํŠธ๊ฐ€ ๋ฐœ์ƒํ•  ๋•Œ ์‹คํ–‰๋˜๋„๋ก ์„ค์ •๋œ ํ•จ์ˆ˜.
  • GestureDetector์—์„œ ์ฝœ๋ฐฑ ํ•จ์ˆ˜ ์ „๋‹ฌ ์‹œ, ๋žŒ๋‹ค ํ‘œํ˜„์‹์ด๋‚˜ ์ต๋ช… ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•ด์•ผ ํ•จ์ˆ˜๊ฐ€ ์ฆ‰์‹œ ์‹คํ–‰๋˜๋Š” ๊ฒƒ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ์ธ์ž๊ฐ€ ์—†๋Š” ํ•จ์ˆ˜๋Š” ํ•จ์ˆ˜ ์ด๋ฆ„๋งŒ์œผ๋กœ ์ฝœ๋ฐฑ์„ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๋‹ค.

0๊ฐœ์˜ ๋Œ“๊ธ€