Daily UI

MaterialWidget์„ ํ™œ์šฉํ•œ ๊ธฐ์กด Bouncing Button ๊ฐœ์„ ์•ˆ

flutter developer 2025. 2. 10. 05:24

๐ŸŽจ What I Designed

์ง์ ‘ ๊ตฌํ˜„์•ˆ ๋ฒ„ํŠผ ๋ฐ”์šด์‹ฑ ํšจ๊ณผ์™€ ํ† ์Šค์•ฑ์— ๊ตฌํ˜„๋œ ๋ฒ„ํŠผ ํšจ๊ณผ ๋น„๊ต

 

https://github.com/suojae/flutter_ui_lab/blob/main/lib/2025/02/10.dart

 

flutter_ui_lab/lib/2025/02/10.dart at main · suojae/flutter_ui_lab

Contribute to suojae/flutter_ui_lab development by creating an account on GitHub.

github.com


๐Ÿ”Ž  How I Made It

BoxShadow๋ฅผ ์ด์šฉํ•œ Shadow ํšจ๊ณผ

์ด์ „ ๊ฒŒ์‹œ๊ธ€์—์„œ Bouncing ํšจ๊ณผ๋ฅผ ShadowBox๋กœ ๊ตฌํ˜„ํ–ˆ์—ˆ๋‹ค. ํ•˜์ง€๋งŒ ์ด ๋ฐฉ์‹์€ ๋งˆ์น˜ ๊ทธ๋ฆผ์„ ๋ง์น ํ•˜๋“ฏ์ด Material ์‹œ์Šคํ…œ๊ณผ ๋”ฐ๋กœ ๋…ธ๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค. (Material์€ Z์ถ•์„ ํ†ตํ•ด ์ž…์ฒด๊ฐ ์ œ๊ณต) ์‹ค์ œ ์œ„์ ฏ์ด ๋– ์žˆ๋Š”๊ฒŒ ์•„๋‹Œ ๋– ์žˆ๋Š” ๋“ฏํ•œ ์ž…์ฒด๊ฐ์„ ์ฃผ๊ธฐ์œ„ํ•ด Box ์ฃผ๋ณ€ (via BoxDecoration) ์— ๊ทธ๋ฆผ์ž ํšจ๊ณผ๋ฅผ ์ฃผ์–ด ๊ฐ™์€ ํ‰๋ฉด์— ์žˆ์Œ์—๋„ ์ž…์ฒด๊ฐ์ด ์žˆ๋Š”๋“ฏ ๋ˆˆ์†์ž„์„ ํ•˜๋Š” ๋ฐฉ์‹์ด์—ˆ๋‹ค.

 

Why PhysicalModel Class

ํ•˜์ง€๋งŒ PhysiclaModel ์˜ elavation ๊ฐ’์„ ์กฐ์ ˆํ•˜๊ฒŒ ๋˜๋ฉด ๋ˆˆ์†์ž„์ด ์•„๋‹Œ ์‹ค์ œ๋กœ ๋–  ์žˆ๋Š” ์œ„์ ฏ์„ GPU๊ฐ€ ๊ทธ๋ ค๋‚ธ๋‹ค. Elevation ๊ฐ’์ด ์ฆ๊ฐ€ํ• ์ˆ˜๋ก, ๋ฌผ๋ฆฌ์  ๋ ˆ์ด์–ด๊ฐ€ "๋ Œ๋”๋ง ํ‘œ๋ฉด(Rendering Surface)"์—์„œ ์œ„๋กœ ๋– ์˜ค๋ฅธ๋‹ค๊ณ  ๊ณต์‹๋ฌธ์„œ์—์„œ ์„ค๋ช…ํ•˜๊ณ  ์žˆ๋‹ค. ์ฆ‰ Physical model ์€  ์ด์ „์— ํ•œ ํ‰๋ฉด์—์„œ ๋ˆˆ์†์ž„์œผ๋กœ ์ž…์ฒด๊ฐ์„ ์ฃผ์—ˆ๋˜ ๊ฒƒ๊ณผ ๋‹ค๋ฅด๊ฒŒ Z์ถ•์„ ๊ธฐ๋ฐ˜์œผ๋กœํ•œ ์‹ค์ œ ๋– ์žˆ๋Š” ์œ„์ ฏ์ด ๋ Œ๋”๋ง๋˜๋ฉฐ ์ด์— ๋”ฐ๋ผ ๊ธฐ๋ณธ๊ตฌํ˜„๋œ ๊ทธ๋ฆผ์ž ํšจ๊ณผ๊ฐ€ ๋งŒ๋“ค์–ด์ง€๋Š” ๊ฒƒ์ด๋‹ค.

 

๋ฌผ๋ก  ๋ชจ๋“  ์œ„์ ฏ์—์„œ PhysicalModel์„ ์“ธ ์ˆœ ์—†๋‹ค. Material ์‹œ์Šคํ…œ์—์„œ AppBar, FloatingActionButton, Card, BottomAppBar ๋“ฑ์˜ ์œ„์ ฏ๋“ค์€ Elavation ์†์„ฑ์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ์ด๋Ÿฌํ•œ ์œ„์ ฏ์—์„œ๋งŒ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

 

 

๋”ฐ๋ผ์„œ ์œ„์ ฏ์—์„œ ๊ทธ๋ฆผ์ž๋ฅผ ํ†ตํ•ด ์ž…์ฒด๊ฐ์„ ํ‘œํ˜„ํ•  ๋•Œ 

1. ๋ณธ์ธ์€ ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌํ„ฐ ๊ฐœ๋ฐœ์ž๋ณด๋‹ค ๋” ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ž…์ฒด๊ฐ์„ ๊ตฌํ˜„ํ•  ์ž์‹ ์ด ์žˆ๋‹ค. -> BoxShadow ์œ„์ ฏ ์‚ฌ์šฉ

2. ์ž…์ฒด๊ฐ์„ ๋‚˜๋งŒ์˜ ๋ฐฉ์‹์œผ๋กœ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ํ•˜๊ณ  ์‹ถ๋‹ค -> BoxShadow ์œ„์ ฏ ์‚ฌ์šฉ

3. ์„ฑ๋Šฅ์ด ๋„ˆ๋ฌด ์ค‘์š”ํ•˜๋‹ค. UI๊ฐ€ ๋„ˆ๋ฌด ํ—ค๋น„ํ•ด์„œ ์ž…์ฒด๊ฐ์— ๋ฆฌ์†Œ์Šค๋ฅผ ํ—ˆ๋น„ํ•˜๊ณ  ์‹ถ์ง€ ์•Š๋‹ค. ->  BoxShadow ์œ„์ ฏ ์‚ฌ์šฉ 

3. ์ด์™ธ์˜ ๊ฒฝ์šฐ๋Š” PhysicalModel ์„ ์‚ฌ์šฉํ•ด์„œ ๊ตฌ๊ธ€ ํ”Œ๋Ÿฌํ„ฐํŒ€์ด ๊ตฌํ˜„ํ•ด์ค€ ์ž…์ฒด๊ฐ์„ ํ™œ์šฉํ•˜์ž! :)


 

25.01.10 ์ˆ˜์ • - PhysicalModel ๋Œ€์‹  Material ์œ„์ ฏ์„ ์“ฐ์ž

โœ… Material ์œ„์ ฏ์€ Flutter์˜ Material Design ์‹œ์Šคํ…œ๊ณผ ์™„๋ฒฝํ•˜๊ฒŒ ํ˜ธํ™˜๋œ๋‹ค.
โœ… Elevation ๊ฐ’๋งŒ ์„ค์ •ํ•˜๋ฉด ์ž๋™์œผ๋กœ ๊ทธ๋ฆผ์ž๊ฐ€ ์ ์šฉ๋˜๋ฉฐ, ์ถ”๊ฐ€์ ์ธ shadowColor ์„ค์ •์ด ํ•„์š” ์—†๋‹ค.
โœ… Ink ํšจ๊ณผ(InkWell, InkSplash)๋ฅผ ํ†ตํ•ด ํ„ฐ์น˜ ํ”ผ๋“œ๋ฐฑ์„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.
โœ… Material 3 (useMaterial3: true)์—์„œ๋Š” ๋‹คํฌ ๋ชจ๋“œ์—์„œ Surface Tint๊ฐ€ ์ž๋™ ์ ์šฉ๋˜์–ด ๋” ์ž์—ฐ์Šค๋Ÿฌ์šด ์ž…์ฒด๊ฐ์„ ์ œ๊ณตํ•œ๋‹ค. (Physical model์—” ์ด๋Ÿฐ ํšจ๊ณผ ์—†์Œ)

 

 

==> PhysicalModel์€ Material์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์—†๋Š” ๊ณณ์—์„œ "๋ณด์กฐ์ ์ธ ์—ญํ• "๋กœ ์“ฐ์ด๋Š” ๊ฒƒ์ด ์ ์ ˆํ•˜๋‹ค

==> Material์ด ์ ์šฉ๋  ์ˆ˜ ์žˆ๋Š” ๊ฒฝ์šฐ๋ผ๋ฉด, Material ์œ„์ ฏ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด ๋” ๊ฐ„๊ฒฐํ•˜๊ณ  ์ž์—ฐ์Šค๋Ÿฌ์šด UI๋ฅผ ๋งŒ๋“ค ์ˆ˜ ์žˆ๋Š” ๋ฐฉ๋ฒ•์ด๋‹ค.