ํ๋ฌํฐ์ ํต์ฌ ๊ฐ๋ ์ธ ์์ ฏ์ ๋ํด ์์๋ณด์ ๐ช
ํ๋ฌํฐ๋ฅผ ์ฐพ๋ค ๋ณด๋ฉด ์ด๋ฐ ํํ์ด ๋์จ๋ค.
Everything is a Widget.
It's all Widgets!
์์ ฏ์ UI๋ฅผ ๋ฌ์ฌํ๋ ๋คํธ์ ํด๋์ค๋ก์, ํ๋ฉด์ ๋ํ๋ ์์๋ฅผ ๊ฒฐ์ ํ๋ ๋ฐ์ดํฐ์ ์ค์ ์ด๋ผ๊ณ ํ ์ ์๋ค. (JS๋ก ์น๋ฉด ์ปดํฌ๋ํธ์ ๋น์ทํ ๊ฐ๋
!)
์ค์ ๋ก ํ๋ฌํฐ์์๋ ๋ชจ๋ ์์ ํ๋ํ๋๊ฐ ์์ ฏ์ด๋ค. ์์ ฏ์ด ์์ ฏ์ ํฌํจํ๊ณ , ์์ ฏ๋ค์ด ๋ชจ์ธ Widget Tree๋ฅผ ๋ฐํ์ผ๋ก ํ๋ฉด์ ๊ทธ๋ฆฐ๋ค.
ํ๋ฉด์์ ๋ ์ด์์์ด๋ ์์ด์ฝ๋ฟ๋ง ์๋๋ผ ์คํ์ผ, ์ ๋๋ฉ์ด์ ๊น์ง๋ ํ๋ฌํฐ์์๋ ์์ ฏ...! ๋ํ์ ์ธ ์์ ฏ๋ค์ ๋ค์๊ณผ ๊ฐ๋ค.
์ด ์์ ฏ๋ค์ ๋ ๊ณ ์ฒ๋ผ ์กฐํฉํด์ ์ํ๋ ์ฑ์ ๊ตฌํํ ์ ์์!
์์ ฏ์ ํฌ๊ฒ StatelessWidget, StatefulWidget์ผ๋ก ๊ตฌ๋ถํ ์ ์๋ค.
VSC์์ stl
์
๋ ฅ ํ ์ํฐ๋ฅผ ์น๋ฉด ์๋์์ฑ~~~๐ช Example์ด๋ผ๊ณ ์์ ฏ ์ด๋ฆ์ ๋ถ์ฌ์ฃผ์๋ค.
class Example extends StatelessWidget {
const Example({ Key? key }) : super(key: key);
Widget build(BuildContext context) {
return Container(...);
}
}
StatelessWidget์ ์์๋ฐ๊ณ , build๋ผ๋ ํจ์๋ฅผ overrideํ๋ค๋ ๊ฑธ ์ ์ ์์!
๐ท constructor(์์ฑ์)
๊ธฐ๋ณธ์์ฑ์๋ก์, class๋ช (์ฌ๊ธฐ์๋ Example)๊ณผ ๋์ผํ ์ด๋ฆ์ ๊ฐ์ง๋ค. ๋ค์ ๋ถ์
: super(key: key)
๋ ๋ถ๋ชจ์ธ StatelessWidget์ ๊ธฐ๋ณธ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ฒ! ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ ํ๋ผ๋ฏธํฐ๊ฐ ์๋ค๋ฉด ๊ธฐ๋ณธ์์ฑ์๋ ์๋ตํ ์ ์๋ค.
๐ท build
Widget์ ๋ฆฌํดํ๋ ํจ์๋ก์ ๋ชจ๋ ์์ ฏ ํด๋์ค์ ํฌํจ๋ ํ์ ๋ฉ์๋์ด๋ค. build๊ฐ ๋ฆฌํดํ๋ ์์ ฏ๋ค๋ก ๋ทฐ๊ฐ ๊ทธ๋ ค์ง๋ค.
๋ง์ฐฌ๊ฐ์ง๋ก stf
์
๋ ฅ ํ ์ํฐ๋ฅผ ์น๋ฉด ์๋์์ฑ ๋๋๋ฐ, ์ด ๋ ๊ฐ์ ํด๋์ค๊ฐ ์์ฑ๋๋ค.
class Example extends StatefulWidget {
const Example({ Key? key }) : super(key: key);
_ExampleState createState() => _ExampleState();
}
class _ExampleState extends State<Example> {
Widget build(BuildContext context) {
return Container(...);
}
}
StatefulWidget์ ์์๋ฐ๋ ์์ ฏ์ด createState ๋ฉ์๋๋ก State ๊ฐ์ฒด๋ฅผ ๋ฆฌํดํ๊ณ , State๋ฅผ ์์๋ฐ๋ ๊ฐ์ฒด๊ฐ build ๋ฉ์๋๋ก Widget์ ๋ฆฌํดํ๋ ํํ์ด๋ค.
State ๊ฐ์ฒด ์ด๋ฆ ์์ ์๋์ผ๋ก ์ธ๋๋ฐ(_)๊ฐ ๋ถ๋๋ฐ, ๋คํธ์์ ํด๋์ค๋ ํ๋กํผํฐ, ๋ฉ์๋ ์์ ์ธ๋๋ฐ๋ฅผ ๋ถ์ด๋ฉด private์ ์๋ฏธํ๋ค. ํด๋์ค์ ๊ฒฝ์ฐ ํด๋น ํ์ผ์์๋ง, ํ๋กํผํฐ์ ๋ฉ์๋๋ ํด๋น ํด๋์ค์์๋ง ์ ๊ทผํ ์ ์์!
๐ท setState
ํ๋ฌํฐ์๊ฒ state๊ฐ์ด ๋ณ๊ฒฝ๋์๋ค๊ณ ์๋ ค์ build ๋ฉ์๋๋ฅผ ๋ค์ ํธ์ถํ๋๋ก ํ๋ ๋ฉ์๋. ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์คํํ ์ ์๊ธฐ ๋๋ฌธ์ setState ์คํ ์ ๋ชจ๋ ๋น๋๊ธฐ ์ฝ๋๋ฅผ ์๋ฃํด์ผ ํ๋ค.
์๋์์ฑ๋ StatefulWidget์ setState๋ ์๋์ผ๋ก ๋ค์ด์์ง ์๊ธฐ ๋๋ฌธ์... ํ๋ฌํฐ๋ก ํ๋ก์ ํธ๋ฅผ ๋ง๋ค๋ฉด ์์ฑ๋๋ ์ด๊ธฐ ์ฑ์ ์ดํด๋ณด์!
0 class MyHomePage extends StatefulWidget {
1 MyHomePage({Key? key, required this.title}) : super(key: key);
2
3 final String title;
4
5
6 _MyHomePageState createState() => _MyHomePageState();
7 }
8
9 class _MyHomePageState extends State<MyHomePage> {
10 int _counter = 0;
11
12 void _incrementCounter() {
13 setState(() {
14 _counter++;
15 });
16 }
17
18
19 Widget build(BuildContext context) {
20 return Scaffold(
21 appBar: AppBar(
22 title: Text(widget.title),
23 ),
24 body: Center(
25 child: Column(
26 mainAxisAlignment: MainAxisAlignment.center,
27 children: <Widget>[
28 Text(
29 'You have pushed the button this many times:',
30 ),
31 Text(
32 '$_counter',
33 style: Theme.of(context).textTheme.headline4,
34 ),
35 ],
36 ),
37 ),
38 floatingActionButton: FloatingActionButton(
39 onPressed: _incrementCounter,
40 tooltip: 'Increment',
41 child: Icon(Icons.add),
42 ),
43 );
44 }
45}
์ฌ์ค onPressed
์ ๋ฐ๋ก setState(() {_counter++})
๋ฅผ ๋ฃ์ด๋ ๋์ง๋ง ๊ฐ๋
์ฑ์ ์ํด ๋นผ ์ค ๊ฒ ๊ฐ๋น.
๐ท initState
ํ๋ฌํฐ๊ฐ ํ๋ฉด์ ์์ ฏ์ ๊ทธ๋ฆฌ๊ธฐ ์ ์ ํ์ํ ๋ชจ๋ ์ด๊ธฐํ๋ฅผ ์ํํ๋ ๋ฉ์๋
Flutter Crash Course for Beginners 2021 - Build a Flutter App with Google's Flutter & Dart
๐ ํ๋ฌํฐ ์ธ ์ก์