๐ง Before
์ธ๊ทธ๋จผํธ ๋ฒํผ์ ๊ตฌํํ๋์ค ํญํ์๋ ๋ณํ๊ฐ ๋๋ฌด ๋จ์กฐ๋กญ๋ค๊ณ ์๊ฐํ๋ค. ์์๊ฒ ๊พธ๋ฏธ๊ณ ์ถ์ด ์ธ๊ทธ๋จผํธ ๋ฒํผ์ ์ ๋๋ฉ์ด์ ์ ๋ฃ์ด๋ณด์๋ค.
โบ๏ธ After
์ ๋๋ฉ์ด์ 1
์ธ๊ทธ๋จผํธ ์ ๋๋ฉ์ด์
์ AnimatedContainer์ ํตํด ๊ตฌํํ๋ค. AnimatedContainer๋ ์์, ํฌ๊ธฐ, ๋ชจ์, ์์น ๋ฑ ์์ฑ์ด ๋ณ๊ฒฝ๋ ๋ ์ ๋๋ฉ์ด์
ํจ๊ณผ๋ฅผ ์๋์ผ๋ก ์ ์ฉํด์ค๋ค. ๋ณ๋์ ์ปจํธ๋กค๋ฌ ์์ด duration๊ณผ curve๋ง ์ค์ ํ๋ฉด ๋๋ค๋๊ฒ ํฐ ์ฅ์ ์ด๋ค. ์ ์ ๋๋ฉ์ด์
์ ํฌ๊ฒ ๋ฒํผ ๋ฐฐ๊ฒฝ์ ๋ณํ์ ํ
์คํธ์ ๋ณํ๋ก ๊ตฌํํ ์ ์๋ค.
๋ฐฐ๊ฒฝ์ ๋ณํ
- duration: ์ ๋๋ฉ์ด์ ์ ์ง์ ์๊ฐ(300ms). ๋ฒํผ ํด๋ฆญ ์ ์์์ด ์ฒ์ฒํ ๋ณ๊ฒฝ
- curve: ์ ๋๋ฉ์ด์ ์๋ ๊ณก์ . Curves.easeInOut์ ๋ถ๋๋ฝ๊ฒ ์์ํ๊ณ ์ผ๋ฐ์ ์ธ ์๋๋ก ์ข ๋ฃ.
- ๋ฐฐ๊ฒฝ์์ ์ ํ: isSelected์ ๋ฐ๋ผ AppColors.primary.blue ๋๋ AppColors.base.deep๋ก ๋ณ๊ฒฝ
AnimatedDefaultTextStyle์ ํ ์คํธ์ ์คํ์ผ(์: ์์, ๊ตต๊ธฐ)์ด ๋ณ๊ฒฝ๋ ๋ ์ ๋๋ฉ์ด์ ํจ๊ณผ๋ฅผ ์ ๊ณตํ๋ค. Animation Container์ ๋ง์ฐฌ๊ฐ์ง๋ก duration๊ณผ curve๋ง ์ค์ ํ๋ฉด ๋๋ค.
ํ ์คํธ์ ๋ณํ
- ํ ์คํธ ์์ ๋ณ๊ฒฝ: ์ ํ๋ ๋ฒํผ์์๋ AppColors.base.white๋ก ๋ณ๊ฒฝ.
- ํ ์คํธ ๊ตต๊ธฐ ๋ณ๊ฒฝ: ์ ํ๋ ๋ฒํผ์์๋ FontWeight.bold๋ก ๊ฐ์กฐ.
์ก์ ์ฃผ๊ธฐ
selectedIndex๋ฅผ ํตํด ํ์ฌ ์ ํ๋ ๋ฒํผ์ ์ธ๋ฑ์ค๋ฅผ ๊ด๋ฆฌํ๋ค. ๋ฒํผ์ ํด๋ฆญํ๋ฉด setState๋ก selectedIndex๋ฅผ ์ ๋ฐ์ดํธํ๊ณ , ์ด๋ฅผ ํตํด ์ ๋๋ฉ์ด์ ์ด ์์๋๋ค. AnimatedContainer์ AnimatedDefaultTextStyle์ ์ํ๊ฐ(isSelected)์ ๋ฐ๋ผ ์ ๋๋ฉ์ด์ ์ด ํธ๋ฆฌ๊ฑฐ ๋๋ค.
์ ์ฒด์ฝ๋ ๋งํฌ https://gist.github.com/suojae/0fbd7f17467f9560a737e6b5ecbc49b4
์ ๋๋ฉ์ด์ 2
๋๋ฒ์งธ ์ ๋๋ฉ์ด์ ์ AnimatedPositioned์ Stack์ ํ์ฉํด ๋ฒํผ ์ ํ ์ ๋ถ๋๋ฝ๊ฒ ์ด๋ํ๋ ์ฌ๋ผ์ด๋ฉ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํด๋ณด์๋ค. ์ฌ๋ผ์ด๋ฉ ์ ๋๋ฉ์ด์ ์ ์ฒซ๋ฒ์งธ์ ๋ฌ๋ฆฌ ๋ฒํผ ๋ฐฐ๊ฒฝ์๋ง ์ ๋๋ฉ์ด์ ์ ์ฃผ๊ณ ํ ์คํธ์์๋ ์ ๋๋ฉ์ด์ ์ ์์ฃผ๊ณ ์๋ณํ๋ง ์ฃผ์๋ค. ์ด๋ฅผ ์ํด ๋จผ์ ๋ ๋ ์ด์ด๋ก ๋ถ๋ฆฌํด์ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํ๋ค.
Stack ์์ ฏ์ ์ฌ์ฉํด ๋ฒํผ ๋ฐฐ๊ฒฝ๊ณผ ํ ์คํธ ๋ ์ด์ด ๋ถ๋ฆฌ
๋ฐฐ๊ฒฝ์์ ๋จ์ํ ์๋ณํ๊ฐ ์๋ ์์น๊ฐ ๋ฐ๋์ด์ผํ๊ธฐ๋๋ฌธ์ Stack ์์ ฏ์ ์ฌ์ฉํด ๋ฒํผ ๋ฐฐ๊ฒฝ๊ณผ ํ ์คํธ๋ฅผ ๋ถ๋ฆฌ๋ ๋ ์ด์ด๋ก ๊ตฌ์ฑํ ์ ๋๋ฉ์ด์ ์ ์ ์ฉํด์ฃผ์๋ค.
๋ฐฐ๊ฒฝ์ ๋ณํ
๋ฒํผ์ ๊ฐ์์ ๋ฐ๋ผ ๋ฐฐ๊ฒฝ์ ํฌ๊ธฐ์ ์์น๋ฅผ ๋์ ์ผ๋ก ์ค์ ํ๊ธฐ ์ํด LayoutBuilder๋ฅผ ํ์ฉํ๋ค. constraints.maxWidth๋ก ์ ์ฒด ๋๋น๋ฅผ ๊ฐ์ ธ์ค๊ณ ๋ฒํผ ๊ฐ์๋ก ๋๋์ด ๋ฒํผ ํ๋์ ๋๋น(buttonWidth)๋ฅผ ๊ตฌํ ํ ์ ํ๋ ์ธ๋ฑ์ค * buttonWidth ๋งํผ ์ผ์ชฝ ์์น๋ฅผ ์ ํด์ฃผ์ด ํ๋ ๋ฐ์ค ๋ฐ์ฝ๋ ์ด์ ์ ์ฑ์์ฃผ์๋ค. ์ด๋ ์์น๋ณํ์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์ ์ ์ฃผ์ด์ผํ์ด์ ์์น์ ๋ฐ๋ฅธ ์ ๋๋ฉ์ด์ ์ ์๋์ผ๋ก ์ฃผ๋ AnimatedPositioned ์์ ฏ์ ํตํด ๊ตฌํํ๋ค.
ํ ์คํธ์ ๋ณํ
ํ ์คํธ๋ ์ ๋๋ฉ์ด์ ์์ด GestureDetector๋ฅผ ํตํด ํญํ ๋๋ง๋ค setState()๋ฅผ ์คํ์์ผ ๋จ์ ์๋ณํ๋ง ์ฃผ์๋ค.
์ ๋๋ฉ์ด์ 02 ์ ์ฒด์ฝ๋: https://gist.github.com/suojae/554c72bb7d2a484df5e7ce0730777333
์ด๋ ๊ฒ ํจ์ผ๋ก์จ ์ ํ๋ ๋ฒํผ์ผ๋ก ๋ฐฐ๊ฒฝ์ด ๋ถ๋๋ฝ๊ฒ ์ฌ๋ผ์ด๋ฉํ๊ณ ์ ํ๋ ํ ์คํธ๋ ํ์ด๋ผ์ดํธ ์์๊ณผ ๊ตต์ ํ ์คํธ๋ก ํ์ํ์ฌ ์์ ์ธ๊ทธ๋จผํธ๋ฅผ ๋ง๋ค ์ ์์๋ค. ์ฝ๋ฉ๋ฉด์์๋ 2๋ฒ์ด ์ข๋ ์์ ์ด ๋ค์ด๊ฐ์ง๋ง ๋ง์ ๋น๊ตํด๋ณด๋ ๊ฒฐ๊ณผ์ ์ผ๋ก๋ 1๋ฒ์ด ๋ ์์ ๊ฒ ๊ฐ๋ค๐ฅน
'Flutter' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Package ๋ฒ์ ๊ด๋ฆฌ ์ ๋ต (0) | 2025.01.27 |
---|---|
Expanded ๊ณผ Flexible ์ ์ฐจ์ด (0) | 2025.01.25 |
Future ์ Task์ ์ฐจ์ด (0) | 2025.01.19 |
๋์์ธ์์คํ ๋ฒํผ ๋นํ์ฑํ๋ฅผ ๊ตฌํํ๋ฉด์ ๋ง์ฃผ์น ํธ๋ฌ๋ธ ์ํ (0) | 2025.01.16 |
์ฝ๋๋ค์ดํฐ ํจํด์ ํ๋ฌํฐ์ ์ ์ฉํ๋ฉฐ ์๊ธด _debugLocked ์๋ฌ (0) | 2025.01.14 |