์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
- Streamlit๊ธฐ์ด
- ์๋ฐ์คํฌ๋ฆฝํธ ๊ณต๋ถ
- ์๋๋ก์ด๋ ์คํ๋์ค
- Flutter
- java
- ์๋ฐ๊ธฐ์ด
- ์๋ฐ์คํฌ๋ฆฝํธ
- Android
- ์๋ฐ๊ณต๋ถ
- ์๋ฐํ๋ก๊ทธ๋๋ฐ
- ์น๋์๋ณด๋ ์ ์
- ํ์ด์ฌ
- db
- ์น๋์๋ณด๋ ๊ธฐ์ด
- ์คํธ๋ฆผ๋ฆฟ ๊ธฐ๋ณธ
- ๋ฐ์ดํฐ๋ฒ ์ด์ค
- ํ์ด์ฌ๊ณต๋ถ
- ํ๋ค์ค๊ณต๋ถ
- ์๋ฐ
- ์๋ฐ์ด๋ณด
- ํ๋ค์ค
- ์คํธ๋ฆผ๋ฆฟ
- Pandas
- RESTful API
- serverless
- Streamlit๊ธฐ๋ณธ
- JavaScript
- streamlit
- MySQL
- ์๋๋ก์ด๋ ์ฑ ๊ฐ๋ฐ
- Today
- Total
ruriruriya
[Flutter] build ๋ฉ์๋ ๋ณธ๋ฌธ
build ๋ฉ์๋๋ Flutter์์ UI๋ฅผ ๊ทธ๋ฆฌ๋ ํต์ฌ์ ์ธ ์ญํ ์ ํ๋ค.
Flutter์์ UI๋ ์์ ฏ์ผ๋ก ๊ตฌ์ฑ๋๊ณ , build ๋ฉ์๋๋ ์ด ์์ ฏ๋ค์ด ํ๋ฉด์ ์ด๋ป๊ฒ ๋ฐฐ์น๋๊ณ ํ์๋ ์ง ์ ์ํ๋ค.
build ๋ฉ์๋ ํธ์ถ ์๊ธฐ?
1. ์ฒ์ ์์ ฏ์ด ํ๋ฉด์ ์ถ๊ฐ๋ ๋
์์ ฏ์ด Flutter ์ฑ ํธ๋ฆฌ์ ์ฝ์
๋๋ฉด, build ๋ฉ์๋๊ฐ ํธ์ถ๋๋ค.
2. ์์ ฏ์ ์์กด์ฑ์ด ๋ณ๊ฒฝ๋ ๋
์๋ฅผ ๋ค์ด, ์์ ฏ์ด ์ฐธ์กฐํ๋ InheritedWidget์ด ์
๋ฐ์ดํธ๋๋ฉด, ํด๋น ์์ ฏ์ build ๋ฉ์๋๊ฐ ๋ค์ ํธ์ถ๋๋ค.
3. ์ํ๊ฐ ๋ณ๊ฒฝ๋ ๋(StatefulWidget)
์ํ๊ฐ ๋ณํ๋ฉด build ๋ฉ์๋๊ฐ ํธ์ถ๋์ด UI๊ฐ ์
๋ฐ์ดํธ๋๋ค.
build ๋ฉ์๋์ ํน์ง
๋ฐํ๊ฐ
ํญ์ ๋ค๋ฅธ ์์ ฏ์ ๋ฐํํด์ผ ํ๋ค.
์๋ฅผ ๋ค์ด, ํ
์คํธ๋ฅผ ํ์ํ๊ฑฐ๋ ๋ฒํผ์ ์์ฑํ๋ ์์ ฏ์ ๋ฐํํ ์ ์๋ค.
๋ค๋ฅธ์ฉ๋๋ก ์ฌ์ฉ ๊ธ์ง
build ๋ฉ์๋๋ ์์ ฏ์ ์์ฑํ๋ ๋ฐ๋ง ์ฌ์ฉํด์ผ ํ๋ค.
์๋ฅผ ๋ค๋ฉด, ๋ฐ์ดํฐ๋ฒ ์ด์ค์ ์ ์ฅํ๊ฑฐ๋ ๋คํธ์ํฌ ์์ฒญ ๊ฐ์ ์์
์ ํ๋ฉด ์๋๋ค.
build ๋ฉ์๋ ๋์ ์๋ฆฌ
1. ํธ์ถ ์์ ๊ฐ๊ฐ์ ๋ง๊ฒ build ๋ฉ์๋๋ฅผ ํธ์ถํ๋ค.
2. ํธ์ถ ๋ค build ๋ฉ์๋๋ ํญ์ ๋ค๋ฅธ ์์ ฏ์ ๋ฐํํ๋ค. ์ด ๋ฐํ๋ ์์ ฏ์ ํ์ฌ ์์ ฏ์ ํ์ ํธ๋ฆฌ๋ฅผ ๊ตฌ์ฑํ๋ค.
3. ๋ฐํ๋ ์์ ฏ์ ๊ธฐ์กด UI์ ๋น๊ตํ์ฌ ํ๋ฉด์ ๊ทธ๋ฆด UI๋ฅผ ์ ์ํ์ฌ ์ ๋ฐ์ดํธ ํ๋ค.
[์์ ์ฝ๋]
1. MaterialApp: Flutter ์ฑ์ ์์์ .
2. Scaffold: ํ๋ฉด ๋ ์ด์์(์ฑ๋ฐ, ๋ณธ๋ฌธ, ํ๋กํ ๋ฒํผ ๋ฑ)์ ์ ์.
3. AppBar: ํ๋ฉด ์๋จ์ ์ฑ๋ฐ.
4. Center: ์์ ์์ ฏ์ ํ๋ฉด ๊ฐ์ด๋ฐ์ ๋ฐฐ์น.
5. Column: ์์ ์์ ฏ์ ์ธ๋ก๋ก ๋์ด.
6. ElevatedButton: ํด๋ฆญ ๊ฐ๋ฅํ ๋ฒํผ.
import 'package:flutter/material.dart';
void main() => runApp(const MyApp());
class MyApp extends StatelessWidget {
const MyApp({super.key});
@override
Widget build(BuildContext context) {
return MaterialApp(
home: Scaffold(
appBar: AppBar(
title: const Text('Flutter ์ด๋ณด ์ฐ์ต'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Text('์๋
ํ์ธ์, Flutter์
๋๋ค!'),
const SizedBox(height: 20),
ElevatedButton(
onPressed: () {
print('๋ฒํผ์ด ๋๋ ธ์ต๋๋ค!');
},
child: const Text('ํด๋ฆญํ์ธ์'),
),
],
),
),
),
);
}
}
BuildContext์ ์ญํ
1. ์์น ์ ๋ณด ์ ๊ณต
BuildContext๋ ํ์ฌ ์์ ฏ์ด ํธ๋ฆฌ์ ์ด๋์ ์์นํด ์๋์ง ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
์ด๋ฅผ ํตํด ํ์ฌ ์์ ฏ์ด ์์ ์์ ฏ(๋ถ๋ชจ)์ผ๋ก๋ถํฐ ์ด๋ค ์ ๋ณด๋ฅผ ์์๋ฐ๊ณ ์๋์ง ์ ์ ์๋ค.
2. ์์๋ ์์ ฏ(InheritedWidget) ์ ๊ทผ
ํธ๋ฆฌ์์ ์ด ์์น์ ์ฐ๊ด๋ ์์๋ ์์ ฏ์ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ฌ ์ ์๋ค.
์๋ฅผ ๋ค์ด, ํ
๋ง ์ ๋ณด๋ ์ฑ์ ์ ์ญ ์ํ๋ฅผ ์์๋ฐ์ ์ฌ์ฉํ ์ ์๋ค.
3. ์์ ฏ ์ด๋์ ๋ฐ๋ฅธ ์ปจํ ์คํธ ๋ณ๊ฒฝ
์์ ฏ์ด ํธ๋ฆฌ์ ๋ค๋ฅธ ์์น๋ก ์ด๋ํ๊ฑฐ๋ ์ฌ๋ฌ ์์น์์ ๋์์ ์ฌ์ฉ๋ ๊ฒฝ์ฐ,
**๊ฐ ์์น์ ๋ง๋ BuildContext**๊ฐ ์ ๊ณต๋๋ค.
build ๋ฉ์๋ ๊ตฌํ ์ ์ ์์ฌํญ
build ๋ฉ์๋๋ ๋ค์ ๋ ๊ฐ์ง ์์์๋ง ์์กดํด์ผ ํ๋ค.
1. ์์ ฏ์ ํ๋
• ์์ ฏ์ ์ ์๋ ๊ฐ(ํ๋)์ ์ฌ์ฉํด UI๋ฅผ ๊ทธ๋ฆฐ๋ค.
• ํ๋๋ ํ ๋ฒ ์ค์ ๋๋ฉด ๋ณ๊ฒฝ๋์ง ์๋ ๊ฒ์ด ์์น(StatelessWidget์ ๊ฒฝ์ฐ).
class MyWidget extends StatelessWidget {
final String title;
MyWidget(this.title);
@override
Widget build(BuildContext context) {
return Text(title); // title ํ๋์ ์์กด
}
}
2. Context๋ฅผ ์ป์ ์ํ
• BuildContext.dependOnInheritedWidgetOfExactType ๋ฉ์๋๋ฅผ ์ฌ์ฉํด ํธ๋ฆฌ์์ ์์๋ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์จ๋ค.
• ์๋ฅผ ๋ค์ด, ํ
๋ง๋ ์ธ์ด ์ค์ ๊ฐ์ ์ ์ญ ์ํ๋ฅผ ๊ฐ์ ธ์จ๋ค.
@override
Widget build(BuildContext context) {
final theme = Theme.of(context); // Theme ๋ฐ์ดํฐ ๊ฐ์ ธ์ค๊ธฐ
return Text('Hello, Flutter!', style: theme.textTheme.headline4);
}
๋ง์ฝ ๋ค๋ฅธ ์์์ ์์กดํด์ผ ํ๋ค๋ฉด?
build ๋ฉ์๋๊ฐ ์์ ๋ ๊ฐ์ง ์ธ์ ์ถ๊ฐ์ ์ธ ์์์ ์์กดํด์ผ ํ๋ค๋ฉด,
StatefulWidget์ ์ฌ์ฉํ๋ ๊ฒ์ด ์ข๋ค.
StatefulWidget์ ์ฌ์ฉํ๋ฉด ์ํ(State)๋ฅผ ๋ถ๋ฆฌํ์ฌ ๋ณด๋ค ์ ์ฐํ๊ฒ ๋ฐ์ดํฐ๋ฅผ ๊ด๋ฆฌํ ์ ์๋ค.