2025-09-17
ย ํ๋ฌํฐ ์์ ฏ๋ค์ ์ฌ์ฉ ๋ฐฉ๋ฒ๊ณผ ๊ธฐ๋ฅ๋ค์ ์์๋ณด์๋ค.
Flutter ํ๋ก์ ํธ ๊ตฌ์กฐ
- lib/
- ์ฑ ๊ฐ๋ฐ์ ์ํ Dart ์ฝ๋ ์์ฑ ์์น.
main.dart๊ฐ ์ง์ ์
- ์ฑ ๊ฐ๋ฐ์ ์ํ Dart ์ฝ๋ ์์ฑ ์์น.
- pubspec.yaml
- ํ๋ก์ ํธ ์ ๋ณด ๊ธฐ๋ก
- ํจํค์ง ์์กด์ฑ ์ถ๊ฐ (
pub.dev์ฌ์ฉ) - ์ด๋ฏธ์ง, ํฐํธ ํ์ผ ์์น ์ ์ธ (
/asset๊ฒฝ๋ก ๋ฑ๋ก) - ํจํค์ง ์ถ๊ฐ ์ โ ์ง์ ์ถ๊ฐ๋ณด๋ค๋
flutter pub add ํจํค์ง๋ช๊ถ์ฅ
- pubspec.lock
- ์ค์น๋ ํจํค์ง ๋ฒ์ ์ ๊ณ ์ ํ์ฌ ๊ธฐ๋ก
- android, ios, โฆ ๊ทธ ์ธ ๋ค์ดํฐ๋ธ ํด๋๋ค
- ๋๋ฐ์ด์ค ๊ถํ ์ค์
- ์ฑ ์ด๋ฆ ๋ฐ ์์ด์ฝ ๊ด๋ฆฌ
- ๋ค์ดํฐ๋ธ ๊ธฐ๋ฅ ์ง์ ๊ฐ๋ฐ ์ ํ์ฉ
Flutter์ ์์ ฏ
- Flutter๋ ์์ ฏ ํธ๋ฆฌ ๊ธฐ๋ฐ์ผ๋ก ํ๋ฉด์ ๋ ๋๋งํ๋ค.
- StatelessWidget : ์ํ ์์
- StatefulWidget : ๋ด๋ถ์ ์ผ๋ก ์ํ๋ฅผ ๊ฐ์ง.
setState()๋ฅผ ํตํด UI ๊ฐฑ์
StatefulWidget
- StatefulWidget์
createState๋ฉ์๋๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ผํ๋ค. - ์ํ ํด๋์ค(
State<์์ ฏ๋ช >์ ์์๋ฐ๋)๋ฅผ ์ ์ํ๊ณcreateState์์ ์ด๊ฑธ ๋ฐํํ๋ ํํ์ด๋ค.
class CounterWidget extends StatefulWidget {
@override
_CounterWidgetState createState() => _CounterWidgetState();
}
class _CounterWidgetState extends State<CounterWidget> {
int count = 0;
@override
Widget build(BuildContext context) {
return GestureDetector(
onTap: () {
count++;
setState((){});
},
child: Text('$count'),
);
}
}
์์ฑ TIP
- ๊ทธ๋ฅ StatelessWidget์ผ๋ก ์ฝ๋์์ฑํ๊ณ ๐ก๋ฅผ ํตํด StatefulWidget์ผ๋ก ๋ณํํ๋๊ฒ ํธํ๋ค!
์ฃผ์ ์์ ฏ
- MaterialApp
- ํ๋ฌํฐ ์ฑ์ ์ต์์ ์์ ฏ. ์ฑ ์ ์ฒด์ ํ ๋ง, ํ์ด์ง ๋ผ์ฐํธ, ํ์ดํ, ํ, ํฐํธ์ ์ค์ ํ ์ ์๋ ํต์ฌ ์ปจํ ์ด๋
- Scaffold
- ํ๋ฉด์ ๊ธฐ๋ณธ ๋ผ๋๊ฐ ๋๋ ์์ ฏ
- ํ๋ฉด ๋น ํ๋์ Scaffold ๋ฅผ ๊ฐ๋๋ค
- ์์ฑ :
appBar,body,floatingActionButton,drawer,bottomNavigationBar๋ฑ
- Column / Row
children,mainAxisAlignment,crossAxisAlignment
- SingleChildScrollView
- Column/Row๋ฅผ ์คํฌ๋กค ๊ฐ๋ฅํ๊ฒ ๊ฐ์ธ๋ ์์ ฏ. child๋ก Column/Row๋ฅผ ๊ฐ๋๋ค
- SizedBox
- ์์ ์์ ฏ ํฌ๊ธฐ๋ฅผ ์ง์ ํ๊ฑฐ๋ ๊ณต๋ฐฑ ์์ฑ ํ ๋ ์ฃผ๋ก ์ฌ์ฉ
- Container
- SizedBox ๊ธฐ๋ฅ + ๋ ์ด์์/์คํ์ผ/์ ๋ ฌ
- Expanded
- Column/Row ๋ด๋ถ์์ ๋จ์ ๊ณต๊ฐ์ ๋ชจ๋ ์ฐจ์ง.
flex๋ก ๋น์จ ์ง์ ๊ฐ๋ฅ
- Column/Row ๋ด๋ถ์์ ๋จ์ ๊ณต๊ฐ์ ๋ชจ๋ ์ฐจ์ง.
- Spacer
- ์์ ฏ ์ฌ์ด์ ๋จ์ ๊ณต๊ฐ๋ง ์ถ๊ฐ
- Stack
- ์์ ์์ ฏ์ ๊ฒน์ณ ๋ฐฐ์น.
- Positioned
- ์์ ฏ์ ์์น ์ง์ (top/bottom/left/right ๋งํผ ๋จ์ด์ง ๊ณต๊ฐ์ ์์์ ์์ฑ)
- width: double.infinity ์์ฑ
- ๊ฐ๋ก ์ฑ์ฐ๊ธฐํ ๋ ์ฐ์ธ๋ค
๋ฒํผ ๋ฐ ์ ์ค์ฒ
- ElevatedButton
- Material ์คํ์ผ ๊ธฐ๋ณธ ๋ฒํผ
- ๋๋ ์ ๋ ์ด์ง ํ์ด๋์ค๋ ํจ๊ณผ
- ๋ถ๋ชจ ์์ ฏ ํฌ๊ธฐ์ ๋ฐ๋ผ ํฌ๊ธฐ๊ฐ ๊ฒฐ์ ๋จ (๋ถ๋ชจ ์์ ฏ ํฌ๊ธฐ๊ฐ ์๋ค๋ฉด ์๋ ์์ ฏ ํฌ๊ธฐ๋ฅผ ๋ฐ๋ผ ๊ฐ)
- GestureDetector
- ๋ชจ๋ ์์ ฏ์ ํด๋ฆญ/ํฐ์น ๊ฐ๋ฅํ๊ฒ ๋ง๋ฆ. child๋ก ์์ ฏ์ ๊ฐ๋๋ค
- ์ฃผ์ ์ด๋ฒคํธ :
onTap,onDoubleTap,onLongPress
๋จ์ถํค
Ctrl + .: ๋น ๋ฅธ ์ก์ (์๋ ์์ฑ, ๋ํ ๋ฑ)