๋ผ์ดํ ์ฌ์ดํด์ ๊ฐ์ฅ ๊ธฐ๋ณธ๋๋ ๊ฐ๋ ์ค ํ๋์ด๋ค. ๋ผ์ดํ ์ฌ์ดํด์ ๋ชฐ๋ผ๋ ์ฑ ๊ฐ๋ฐ์ด ๊ฐ๋ฅํ๋ค. ํ์ง๋ง ๊ฐ๋ฐํ๋ฉด์ ์ฌ๋ฌ๊ฐ์ง ๋ฌธ์ ๊ฐ ๋ฐ์ํ ํ ๋ฐ ๋ผ์ดํ ์ฌ์ดํด์ ์๋ฉด ๋์ฒํ๊ธฐ ์ฌ์ธ ๊ฒ์ด๋ค. ๋ํ ํผํฌ๋จผ์ค ๋ถ๋ถ์์๋ ํฐ ์ํฅ์ ๋ผ์น๊ธฐ ๋๋ฌธ์ ๊ณต๋ถํด์ผ๊ฒ ๋ค๊ณ ์๊ฐํ๋ค.
Constructor
|
createState()
|
initState()
|
didChangeDependencies()
|
Build()
์์๋ก ๋ผ์ดํ์ฌ์ดํด์ด ์ด์ด์ ธ๊ฐ๋ค. ์ถ๊ฐ์ ์ผ๋ก ์ข ๋ฃ๋ ๋ dispose() ๊ฐ ํธ์ถ๋๋ค.
setState() : ์์ ฏ์์ state๊ฐ ๋ณ๊ฒฝ๋ ๋ ํธ์ถ๋๊ณ ๋น๋๋ฅผ ํ๋ค.
didUpdateWidget() : ๋ถ๋ชจ ์์ ฏ์์ ์
๋ฐ์ดํธ๊ฐ ๋ฐ์ํ๋ฉด ํธ์ถ๋๊ณ ๋น๋๋ฅผ ํ๋ค.
์์ฑ์์ด๋ค. ๋ฉค๋ฒ๋ณ์์ ๋ถ๋ชจ๋ก๋ถํฐ ๋ฐ์ ๋ณ์๋ฅผ ๋ฃ์ด์ฃผ๋ ์์ ์ ํด์ค๋ค.
statefulWidget
์ ๋ฐ๋์ ์กด์ฌํด์ผ ํ๋ค.
๋ณดํต ํ
ํ๋ฆฟ์ผ๋ก statefulWidget
์ ์์ฑํด์ฃผ๋ฉด ๋ค์๊ณผ ๊ฐ์ด ๋ง๋ค์ด์ง๋ค.
class FavoriteWidget extends StatefulWidget {
const FavoriteWidget({Key? key}) : super(key: key);
_FavoriteWidgetState createState() => _FavoriteWidgetState();
}
์ด๊ฑฐ ์ด์์ผ๋ก๋ ๋ฑํ ์์ ํ ํ์๊ฐ ์๋ค.
์์ ฏ์ด ์์ฑ๋ ๋ ํธ์ถ๋๋ ๋ฉ์๋์ด๋ค. state
๋ฅผ ์ด๊ธฐํ ํด์ฃผ๋ ์ญํ ๋ก ์ฌ์ฉ๋๋ฉฐ, ์ต์ด ํ๋ฒ ๋ง ํธ์ถ๋๋ค.
์ฌ์ฉํ๋ ๋ฐฉ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค.
void initState(){
super.initState(); // ๋ฐ๋์ ํด์ค์ผํ๋ค.
/*์ด๊ธฐํ ๊ด๋ จ...*/
}
์์ ฏ์ด ์ต์ด ์์ฑ ๋ ํ, initState()
๋ค์์ ๋ฐ๋ก ํธ์ถ๋๋ค.
Called when a dependency of this State object changes. - Flutter
๋ํ ์ ๋ด์ฉ์ฒ๋ผ ์์ ฏ์ด ์์กดํ๋ ๋ฐ์ดํฐ์ ๊ฐ์ฒด๊ฐ ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ๋๋ค.
void didChangeDependencies(){
super.didChangeDependencies();
/*state ๋ณ๊ฒฝ ์ ํธ์ถ*/
}
UI๋ฅผ ๊ตฌํํ๋ ๋ถ๋ถ์ผ๋ก, ์ด ๋ฉ์๋๋ ๊ฐ์ฅ ๋ง์ด ํธ์ถ๋๋ค. ์ด๊ณณ์ ๊ณ์ฐ์ด ํ์ํ ๋ก์ง์ด ๋ง์ด ์๋ค๋ฉด ์ฑ์ ํผํฌ๋จผ์ค๊ฐ ํ์ ํ ๋ฎ์์ง๋ค.
build()
๋ฉ์๋์ ํน์ง์ ๋ค์๊ณผ ๊ฐ๋ค.
build(){
return Container(...)
}
Widget
๋ด๋ถ ์ํ๊ฐ ๋ณ๊ฒฝ๋์์์ ํ๋ ์์ํฌ์ ์๋ ค์ค๋ค. ๊ฐ์ด ๋ณ๊ฒฝ๋์์์ผ๋ก UI์ ๋ณํ ๊ฐ์ ๋ฐ์ํด์ผํ๋ build ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค. ๋ง์ฝ setState()
๋ฅผ ์ฌ์ฉํ์ง ์๊ณ ๊ฐ์ ๋ณ๊ฒฝ์ํค๋ฉด build()
๋ฉ์๋๊ฐ ํธ์ถ๋์ง ์์ UI ์ ๋ฐ์๋์ง ์๋๋ค.
void setState(() => {
_myState = value;
})
// void callback ํจ์
์์ ฏ์ ๊ตฌ์ฑ์ด ๋ณ๊ฒฝ๋ ๋๋ง๋ค ํธ์ถ๋๋ค. ์ ํํ ์ค๋ช ํ์๋ฉด ๋ถ๋ชจ ์์ ฏ์ด ๋ณ๊ฒฝ๋์ด ์ฌ๊ตฌ์ฑ ํด์ผํ๋ ๊ฒฝ์ฐ ํธ์ถ๋๋ค.
์ด ๋ฉ์๋๋ ์ด์ ์ํ์ ์์ ์ ๋ฐ๋๋ค.(oldWidget)
void didUpdateWidget(covariant T oldWidget) {
super.didUpdateWidget(oldWidget);
if(oldWidget.value != widget.value){
print('update!');
}
}
dispose()
๋ฉ์๋๋ ์ฌ์ฉ๋์๋ ๊ฒ๋ค์ ์๊ตฌ์ ์ผ๋ก ์ ๊ฑฐํ ๋ ์ฌ์ฉํ๋ค. (scrollController, pageController...) ์ ๊ฑฐํด์ฃผ์ง ์์ผ๋ฉด ๋ฉ๋ชจ๋ฆฌ ๋์๊ฐ ๋ฐ์ํ์ฌ ์ฑ์ ํผํฌ๋จผ์ค๊ฐ ๋จ์ด์ง๊ธฐ ๋๋ฌธ์ ํด์ฃผ๋๊ฒ์ด ์ข๋ค.
void dispose() {
// ...
super.dispose()
}
ํ๋ฌํฐ์ ์๋ช ์ฃผ๊ธฐ์ ๋ํด ์์๋ณด์๋ค. ์๋ช ์ฃผ๊ธฐ๋ฅผ ์ ์์๋๋ฉด ๊ฐ๋ฐํ๋ฉด์ ์๊ธฐ๋ ์ด์๋ฅผ ๋น ๋ฅด๊ฒ ์บ์นํ ์ ์์ ๊ฒ์ด๋ค.
์กฐ๋ง๊ฐ ํ๋ก์ ํธ ๊ฐ๋ฐ์ ๋ค์ด๊ฐ ๊ฒ ๊ฐ๋ค. ๊ทธ์ ๊น์ง ํ๋ฌํฐ ์ง์์ ์ต๋ํ ์ต๋ํ์ฌ ๋ฌธ์ ์์ด ๊ฐ๋ฐํ ์ ์๋๋ก ํ์.