* Flutter ๊ณต์ ํํ์ด์ง์ State management ๋ฅผ ๊ฐ๋จํ๊ฒ ํด์ & ์ ๋ฆฌ ํ ๊ธ.
Flutter UI์ ๊ฐ์ฅ ํฐ ํน์ง์ ๋ค๋ฅธ UI ํ๋ ์์ํฌ์์ ์ฌ์ฉํ๋ ๋ช ๋ นํ ๋ฐฉ์๊ณผ๋ ๋ค๋ฅด๊ฒ ์ ์ธํ UI๋ผ๋ ์ ์ด๋ค.
๋ช ๋ นํ ๋ฐฉ์์ UI ํ๋ก๊ทธ๋๋ฐ์ UI๊ฐ์ฒด๋ฅผ ์ผ์ผ์ด ๊ตฌ์ฑํ๊ณ , ๋์ค์ UI๊ฐ ๋ฐ๋๋ฉด ๋ฉ์๋์ setter๋ค์ ์ด์ฉํ์ฌ ๋ณ๊ฒฝํ๋
์ฐ๋ฆฌ์๊ฒ ์ต์ํ ๋ฐฉ์์ด๋ค.
์ด์ ๋ฐ๋๋ก Flutter๋ ํ์ฌ์ UI ์ํ๋ง ๋ฌ์ฌํ๊ณ , ๋ณํ๋ ํ๋ ์์ํฌ์ ๋งก๊ธฐ๋๋ก ํ๋ค.
๊ทธ๋์ Flutter์์ UI๋ฅผ ์ด๋ป๊ฒ ๋ค๋ฃจ๋์ง์ ๋ํด ์ฌ๊ณ ์ ํ์ด ํ์ํ๋ค.
Flutter์ ์ํ ์๊ฐ.
- ์๋ช ์ด ์งง์ ์ํ ( Ephemeral State )
- ์ฑ ์ํ ( App State )
1. ์๋ช ์ด ์งง์ ์ํ ( Ephemeral State ) / ์ฌ์ฉ ํ ์ญ์ ๋๋ ์ํ : UI State, Local State๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
๋จ์ผ ์์ ฏ์ ๊น๋ํ๊ฒ ํฌํจํ ์ ์๋ ์ํ๋ก ์๋์ ์ผ๋ก ๋ชจํธํ๊ฒ ์ ์ํ์ผ๋ฏ๋ก ์๋์ ๋ช ๊ฐ์ง ์๋ฅผ ๋ณด๊ณ ํ์ ํ๋ฉด ๋๋ค.
- ํ์ด์ง๋ทฐ(View)์ ํ์ฌ ํ์ด์ง
- ๋ณต์กํ ์ ๋๋ฉ์ด์ ์ ํ์ฌ ์งํ๋ฅ .
- BottomNavigationBar์ ํ์ฌ ์ ํํ ํญ.
์ฆ ๋ณ๋์ ์ํ ๊ด๋ฆฌ(Redux, Getx, ScopedModel ๋ฑ)๊ฐ ํ์ ์๋ ์ํ์ผ ๋, StatefulWidget์ผ๋ก๋ง ๋ง๋ค๋ฉด ๋๋ค.
class MyHomepage extends StatefulWidget {
@override
_MyHomepageState createState() => _MyHomepageState();
}
class _MyHomepageState extends State<MyHomepage> {
int _index = 0;
@override
Widget build(BuildContext context) {
return BottomNavigationBar(
currentIndex: _index,
onTap: (newIndex) {
setState(() {
_index = newIndex;
});
},
// ... items ...
);
}
}
_index ์ ์ธ ํ, onTap ์ด๋ฒคํธ ํจ์๋ฅผ ํตํด _index์ ๊ฐ์ ์์ ํ๋ค. _index๋ MyHomepage ์์ ฏ ์์์๋ง ๋ณ๊ฒฝ๋๋ค.
์ฌ์ฉ์๊ฐ ์ฑ์ ๋ซ๊ณ ๋ค์ ์์ํ๋ฉด _index๋ ์ด๊ธฐ ์ค์ ๊ฐ์ธ 0์ผ๋ก ์ฌ์ค์ ๋๋ค.
2. ์ฑ ์ํ ( App State ) / ์ฌ์ฉ ํ ์ญ์ ๋์ง ์๋ ์ํ : Shared State๋ผ๊ณ ๋ ๋ถ๋ฆฐ๋ค.
์ฑ ์ํ๋ ์ฌ์ฉ ํ ์ญ์ ๋์ง ์๊ณ ์ฑ์ ์ฌ๋ฌ ๋ถ๋ถ์์ ๊ณต์ ํ๋ฉฐ ์ฌ์ฉ์ ์ธ์ ๊ฐ์ ์ ์งํ๋ ค๋ ์ํ์ด๋ค.
์ฑ ์ํ๋ฅผ ์ฌ์ฉํ๋ ๋ช ๊ฐ์ง์ ์์๋ ์๋๋ฅผ ์ฐธ๊ณ ํ๋ฉด ๋๋ค.
- ์ฌ์ฉ์ ๊ธฐ๋ณธ ์ค์
- ๋ก๊ทธ์ธ ์ ๋ณด
- SNS ์ฑ์์ ์๋ฆผ(Notification)
- E-Commerce ์ฑ์์ ์ฅ๋ฐ๊ตฌ๋
- ์ฝ์ / ์ฝ์ง ์์์ ์ฒ๋ฆฌํ๋ ๋ถ๋ถ
> Flutter์์๋ ์ํฉ์ ๋ฐ๋ผ ์ด๋ค state๋ฅผ ์ฌ์ฉํด์ผ ํ๋์ง์ ๋ํ ๋ช ํํ ๊ท์น์ ์๋ค๊ณ ๋งํ๋ค.
๋ค์ํ ์ํฉ์ ๋ง๊ฒ ๊ฐ์ ์์์ ๊ณ ๋ฏผํ๊ณ ์ฌ์ฉํ๋ผ๋ ๋ป์ธ ๊ฒ ๊ฐ๋ค.
state๋ฅผ ์์๋ณด๋ค ๋ณด๋, Flutter์์ UI๊ฐ rebuild ๋๋ ์กฐ๊ฑด์ด๋ ์๋ rebuild์ ๋ํด ์์๋ณด๊ณ ์ถ์ด์ก๋ค.
๋ค์์๋ Flutter UI ๋น๋์ ๋ํด ๊ณต๋ถํด์ผ ๋ด์ผ๊ฒ ๋ค!