์ค๋ ์ด์๊ฐ์๋ Future๋ฅผ UI๋ก ํํํ๋ ๋ฐฉ๋ฒ์ ๋ํด์ ์์๋ณด์์ต๋๋ค.
StatefulWidget์ ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ฐ์ง๋ ์์ ฏ์ ๋๋ค.
์ด๋ฌํ ์์ ฏ์ State ํด๋์ค์ ํจ๊ป ์ฌ์ฉ๋ฉ๋๋ค. State ํด๋์ค๋ StatefulWidget๊ณผ ๊ด๋ จ๋ ๋ฐ์ดํฐ์ ๋ก์ง์ ๊ด๋ฆฌํฉ๋๋ค. ์ํ๋ฅผ ๋ณ๊ฒฝํ ๋๋ setState() ๋ฉ์๋๋ฅผ ์ฌ์ฉํ์ฌ State ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ๊ณ UI๋ฅผ ๋ค์ ๋น๋ํฉ๋๋ค.
์ผ๋ฐ์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋น๋๊ธฐ์ ์ผ๋ก ๊ฐ์ ธ์ค๊ฑฐ๋ ๋ณ๊ฒฝํด์ผ ํ๋ ๊ฒฝ์ฐ์ ์ฌ์ฉ๋ฉ๋๋ค. ์๋ฅผ ๋ค์ด, ์ฌ์ฉ์๊ฐ ๋ฒํผ์ ํด๋ฆญํ๋ฉด ๋ฐฑ์๋ ์๋ฒ์์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ UI๋ฅผ ์ ๋ฐ์ดํธํด์ผ ํ ๋ ์ฌ์ฉํ ์ ์์ต๋๋ค. ์ด ๊ฒฝ์ฐ, setState() ๋ฉ์๋ ๋ด์์ Future๋ async/await์ ๊ฐ์ ๋น๋๊ธฐ ์์ ์ ์ํํ์ฌ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ณ , ๊ฐ์ ธ์จ ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ์ฌ State ๊ฐ์ฒด๋ฅผ ์ ๋ฐ์ดํธํ๊ณ UI๋ฅผ ๋ค์ ๋น๋ํฉ๋๋ค.
StatelessWidget์ ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ฐ์ง๋ ์์ ฏ์ ๋๋ค. ์ด๋ฌํ ์์ ฏ์ ์ฃผ๋ก ์ ์ ์ธ ์ฝํ ์ธ ๋ฅผ ํ์ํ๊ฑฐ๋, ๋ถ๋ชจ ์์ ฏ์ผ๋ก๋ถํฐ ์ ๋ฌ๋ฐ์ ๋ฐ์ดํฐ๋ฅผ ํ์ํด์ผ ํ ๋ ์ฌ์ฉ๋ฉ๋๋ค. State ํด๋์ค ์์ด๋ ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋น๋๊ธฐ ์์ ์ ์ฒ๋ฆฌํด์ผ ํ ๋๋ FutureBuilder ์์ ฏ์ ์ฌ์ฉํ ์ ์์ต๋๋ค. FutureBuilder๋ Future ๊ฐ์ฒด์ ์๋ฃ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ UI๋ฅผ ํ์ํ ์ ์๋๋ก ๋์์ค๋๋ค. FutureBuilder๋ future ๋งค๊ฐ๋ณ์๋ฅผ ํตํด Future ๊ฐ์ฒด๋ฅผ ๋ฐ์์ต๋๋ค. Future ๊ฐ์ฒด๊ฐ ์๋ฃ๋๋ฉด builder ํจ์๊ฐ ํธ์ถ๋๊ณ , ๊ทธ ๊ฒฐ๊ณผ์ ๋ฐ๋ผ ๋ค๋ฅธ UI๋ฅผ ๋ฐํํฉ๋๋ค.
FutureBuilder๋ฅผ ์ฌ์ฉํ๋ฉด Future ๊ฐ์ฒด์ ์ํ์ ๋ฐ๋ผ ๋ก๋ฉ ์ค, ์๋ฌ, ์๋ฃ ๋ฑ์ ์ํ์ ๋ง๋ UI๋ฅผ ์ฝ๊ฒ ๊ตฌ์ฑํ ์ ์์ต๋๋ค. ์๋ฅผ ๋ค์ด, ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋์ ๋ก๋ฉ ์คํผ๋๋ฅผ ํ์ํ๊ณ , ๋ฐ์ดํฐ๋ฅผ ์ฑ๊ณต์ ์ผ๋ก ๊ฐ์ ธ์ค๋ฉด ๋ฐ์ดํฐ๋ฅผ ํ์ํ๊ณ , ์๋ฌ๊ฐ ๋ฐ์ํ๋ฉด ์๋ฌ ๋ฉ์์ง๋ฅผ ํ์ํ๋ ๋ฑ์ ์์ ์ ํ ์ ์์ต๋๋ค.
์์ฝํ๋ฉด, StatefulWidget๊ณผ setState()๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋น๋๊ธฐ ์์ ์ ์ํํ์ฌ ์ํ๋ฅผ ์ ๋ฐ์ดํธํ๊ณ UI๋ฅผ ๋ค์ ๋น๋ํ ์ ์์ต๋๋ค. StatelessWidget๊ณผ FutureBuilder๋ฅผ ์ฌ์ฉํ๋ฉด ๋ณ๊ฒฝ ๋ถ๊ฐ๋ฅํ ์ํ๋ฅผ ๊ฐ์ง๋ฉฐ, ๋น๋๊ธฐ ์์ ์ ์๋ฃ ์ฌ๋ถ์ ๋ฐ๋ผ ๋ค๋ฅธ UI๋ฅผ ํ์ํ ์ ์์ต๋๋ค.
setState() ๋ค์ ํ๋ฒ ๋ ๊ณต๋ถํ๊ธฐ
**setState()
**๋ ์ํ(State)๋ฅผ ๋ณ๊ฒฝํ๊ณ UI๋ฅผ ๋ค์ ๊ทธ๋ฆฌ๋ ๋ฉ์๋์
๋๋ค. **setState()
**๋ฅผ ํธ์ถํ๋ฉด ํด๋น ์์ ฏ์ ์ํ๊ฐ ์
๋ฐ์ดํธ๋๊ณ , Flutter ํ๋ ์์ํฌ๋ ๋ณ๊ฒฝ๋ ์ํ๋ฅผ ๊ฐ์งํ์ฌ ๊ด๋ จ๋ ์์ ฏ๋ค์ ๋ค์ ๋ ๋๋งํฉ๋๋ค.
import 'package:flutter/material.dart';
void main() {
runApp(MyApp());
}
class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter ์์',
home: Scaffold(
appBar: AppBar(
title: Text('Flutter ์์'),
),
body: Center(
child: MyWidget(),
),
),
);
}
}
class MyWidget extends StatefulWidget {
@override
_MyWidgetState createState() => _MyWidgetState();
}
class _MyWidgetState extends State<MyWidget> {
String _text = '';
@override
Widget build(BuildContext context) {
return Column(
mainAxisAlignment: MainAxisAlignment.center,
children: <Widget>[
Text(
_text,
style: TextStyle(fontSize: 24),
),
FloatingActionButton(
onPressed: () => setState(() => _text = 'Hello World!'),
child: Icon(Icons.add),
),
],
);
}
}
**MyApp
**์ build()
๋ฉ์๋์์๋ Scaffold
์์ ฏ์ ์์ฑํ๊ณ , **MyWidget
**์ Center
์์ ฏ ๋ด์ ๋ฐฐ์นํฉ๋๋ค. ๊ทธ๋ฆฌ๊ณ **MyWidget
**์ build()
๋ฉ์๋์์๋ ํ
์คํธ ์์ ฏ๊ณผ ํ๋กํ
์ก์
๋ฒํผ์ ์ง์ ๋ฐํํ๊ฒ ๋ฉ๋๋ค.
์ฝ๋๋ฅผ ์คํํ๋ฉด ์ฑ์ด ์์๋ ๋๋ ๋น ํ ์คํธ๊ฐ ํ์๋๊ณ , ๋ฒํผ์ ๋๋ฅผ ๋๋ง๋ค "Hello World!"๋ผ๋ ๋ฌธ๊ตฌ๊ฐ ํ ์คํธ ์์ ฏ์ ํ์๋ฉ๋๋ค.