option(โฅ)+ enter : ๊ฐ์ธ๋ ๊ตฌ์กฐ(Wrap) ๋ง๋ค๊ฑฐ๋ ์ ๊ฑฐํ ๋ ํ์ฉ
1. Introduction
Flutter์์๋ Wrap ์์ ฏ์ ๋ง์ด ์ฌ์ฉํ๋ ๊ฒ ๊ฐ๋ค. ์๋ํ๋ฉด ํ๋ฉด์ ๋ชจ๋ ์์ ์์ฒด๊ฐ ์์ ฏ์ด๋ค ๋ณด๋, ๋ฐฐ์น๋ฅผ ํ ๋ Column, Row, Container ๋ฑ์ ์ ์ ํ๊ฒ ํผ์ฌํด์ ์ฌ์ฉํด์ผ ํ๊ธฐ ๋๋ฌธ์ด๋ค.
ํ์ง๋ง ์ค์ ๋ก VS Code ๋๋ Android Studio๋ก ์ฝ๋๋ฅผ ์ง๋ ๊ฒฝ์ฐ ์๋กญ๊ฒ Wrap ์ ํ๋ ๊ฒ ์์ฒด๊ฐ ์ฝ์ง ์์ ์์ ์ด๋ค.
๊ดํธ๊ฐ ๋ง๊ณ ์์นซ ์๋ชปํ๋ค๊ฐ ์ฝ๋์์ ์๋ฌ๊ฐ ๋ฐ์ํ๊ธฐ ์ฝ์์ด๊ธฐ ๋๋ฌธ์ด๋ค.
๊ทธ๋์ Wrap ์ ํ๊ธฐ ์ํด์๋ option ํค์ enter ํค๋ฅผ ๊ฐ์ด ๋๋ฅด๊ฒ ๋๋ฉด ํด๋น ์์ ฏ์ ๋ํด ์ด๋ค ์์ผ๋ก ๊ฐ์ ๊ฒ์ธ์ง, ๋๋ ๊ฐ์ธ์ ธ ์๋ ๋ถ๋ถ์ ์ ๊ฑฐํ ๊ฒ์ธ์ง ์ ํ์ ํ ์๊ฐ ์๋ค.
์๋ ๊ทธ๋ฆผ ์ฐธ์กฐ.
์ด๋ ๊ฒ ์ฝ๋๋ฅผ ์์ฑํ๋ฉด ๋ค์๊ณผ ๊ฐ์ ์ฝ๋์์ ์๋กญ๊ฒ ์์ ฏ๋ค์ ์ถ๊ฐํ๊ณ ๋ฃ๋ ์์ ์ด ํธ๋ฆฌํด์ง๋ค.
Flutter ์ค์ต์ผ๋ก ๋ค์ 4๊ฐ์ง์ ๋ํด์ ์์๋ณด์.
2. To Study
- MaterialApp์์ appBarTheme์์ backgroundColor ์์ฑ๊ณผ titleTextStyle ์์ฑ์์ ์์๊ณผ ํฐํธ ์ฌ์ด์ฆ ์์ ํ๊ธฐ
[Stateless Widget]
- Scafford ์ฌ์ฉํ๊ธฐ
- Center, Column, Row ๋ฅผ ์ฌ์ฉํ๊ณ mainAxisAlignment ์ฌ์ฉํ์ฌ ์ ๋ ฌ ๋ง์ถฐ๋ณด๊ธฐ
- ๋ณ์๋ฅผ ํ์ฉํ์ฌ ๋์ ์ผ๋ก ์นด์ดํ ํ๋ ๊ฐ ๋ง๋ค์ด๋ณด๊ธฐ
์ค์ต ํ์ผ : main.dart
์๋ ์ผ๋ถ ์ฝ๋.
import 'package:flutter/material.dart';
void main() {
runApp(const MyApp());
}
class MyApp extends StatelessWidget {
const MyApp({super.key});
// This widget is the root of your application.
@override
Widget build(BuildContext context) {
return MaterialApp(
title: 'Flutter Demo',
theme: ThemeData(
colorScheme: ColorScheme.fromSeed(seedColor: Colors.deepPurple),
useMaterial3: true,
// appBar ์์ ๋ณ๊ฒฝ
appBarTheme: AppBarTheme(
backgroundColor: Colors.blue, // appBar ์ ์ฒด ์์ ํ๋์
titleTextStyle: TextStyle(
color: Colors.black,
fontSize: 25.0, // ํฐํธ ์ฌ์ด์ฆ ๊ธฐ๋ณธ ์ฌ์ด์ฆ์ 2.5๋ฐฐ
), // title ํ
์คํธ ์์ ๊ฒ์ ์
)
),
home: const MyHomePage(),
);
}
}
class MyHomePage extends StatefulWidget {
const MyHomePage({super.key});
@override
State<MyHomePage> createState() => _MyHomePageState();
}
class _MyHomePageState extends State<MyHomePage> {
int count = 1;
@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: Text('Home'),
),
body: Center(
child: Column(
mainAxisAlignment: MainAxisAlignment.center,
children: [
Text(
'$count',
style: TextStyle(
color: Colors.black,
fontSize: 100,
)),
Text(
'$count',
style: TextStyle(
color: Colors.red,
fontSize: 70,
)),
],
),
),
floatingActionButton: FloatingActionButton(
onPressed: () {
// ํ๋ฉด ๊ฐฑ์
setState(() {
count++;
});
},
child: Icon(Icons.add_box_outlined)
),
);
}
}
- MaterialApp์์ appBarTheme์์ backgroundColor ์์ฑ๊ณผ titleTextStyle ์์ฑ์์ ์์๊ณผ ํฐํธ ์ฌ์ด์ฆ ์์ ํ๊ธฐ
[Stateless Widget]
์ฐ์ ์ ์ผ๋ก MaterialApp์ ํ๋ฌํฐ์ ์ต์์ ์์ ฏ ์ค ํ๋์ด๋ค.
๊ธฐ๋ณธ์ ์ธ ๋ ์ด์์์ ์ค์ ์ ์ฌ๊ธฐ์ ์ ์ํ ์ ์๋๋ฐ, ์๋ ๊ตฌ์ฑ ์์๋ค์ด ์๋ค.
์์ | ๊ตฌ์ฑ ์์ | ์ค๋ช |
1 | title | ์ฑ์ ์ด๋ฆ์ด๋ ์ ๋ชฉ์ ์ง์ ํฉ๋๋ค. ์ด๊ฒ์ ์ฑ์ ์์ํ ๋ ํ์๋๋ ๊ธฐ๋ณธ ์ฑ ๋ฐ์ ํ์๋ฉ๋๋ค. |
2 | home | ์ ๊ธฐ๋ณธ ํ ํ์ด์ง๋ฅผ ์ง์ ํฉ๋๋ค. ์ด๊ฒ์ ์ฑ์ด ์์๋ ๋ ํ์๋๋ ์ฒซ ๋ฒ์งธ ํ๋ฉด์ ๋๋ค. |
3 | theme | ์ฑ์ ์ ๋ฐ์ ์ธ ํ ๋ง๋ฅผ ์ง์ ํฉ๋๋ค. ์์ ์คํค๋ง, ํฐํธ ์คํ์ผ, ์์ด์ฝ ํ ๋ง ๋ฑ์ ์ค์ ํ ์ ์์ต๋๋ค. |
4 | routes | ์ฑ ๋ด๋ถ์ ๋ค์ํ ํ๋ฉด์ ๊ด๋ฆฌํ๊ธฐ ์ํ ๋ผ์ฐํธ ๋งต์ ์ ์ํฉ๋๋ค. ๊ฐ ๋ผ์ฐํธ๋ ํ๋ฉด ์์ ฏ๊ณผ ์ฐ๊ฒฐ๋ฉ๋๋ค. |
5 | initialRoute | ์ฑ์ด ์ฒ์ ์์๋ ๋ ํ์ํ ์ด๊ธฐ ๋ผ์ฐํธ๋ฅผ ์ง์ ํฉ๋๋ค. |
6 | onGenerateRoute | ๋ผ์ฐํ ์ด ํ์ํ ๋ ํธ์ถ๋๋ ํจ์๋ฅผ ์ง์ ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ์ด ํจ์๋ ๋์ ์ผ๋ก ๋ผ์ฐํธ๋ฅผ ์์ฑํ๊ณ ๋ฐํํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
7 | locale | ๋ก์ผ์ผ์ ์ค์ ํ์ฌ ์ฑ์ ์ธ์ด ๋ฐ ์ง์ญํ๋ฅผ ๊ด๋ฆฌํฉ๋๋ค. |
8 | supportedLocales | ์ง์ํ๋ ๋ก์ผ์ผ ๋ชฉ๋ก์ ์ ์ํฉ๋๋ค. ์ฑ์ด ๋ค๊ตญ์ด๋ฅผ ์ง์ํ๋ ๊ฒฝ์ฐ ์ฌ์ฉ๋ฉ๋๋ค. |
9 | ๊ธฐํ ์ค์ | debugShowCheckedModeBanner, navigatorObservers, home, builder, onUnknownRoute ๋ฑ ๋ค์ํ ์ฑ ์ค์ ์ ์ง์ ํ ์ ์์ต๋๋ค. |
- Scafford ์ฌ์ฉํ๊ธฐ
์ฌ๊ธฐ์ Scaffold๋ฅผ ์ด์ฉํด์ ์ ์ฒด ์ฝ๋๋ฅผ ๊ฐ์ธ๋ ๊ตฌ์กฐ๋ก ์ฝ๋๋ฅผ ์์ฑํ๋ค.
๊ทธ ์ด์ ๋ ์ผ๋ฐ์ ์ธ ๋ ์ด์์ ๊ตฌ์กฐ๋ฅผ ์ ์ํ๋ฉฐ, ์ฑ ๋ฐ (AppBar), ๋ฐํ ๋ค๋น๊ฒ์ด์ ๋ฐ (BottomNavigationBar), ์ค๋ต๋ฐ (SnackBar) ๋ฐ FAB์ ๊ฐ์ ๊ธฐ๋ณธ UI ์์๋ฅผ ์ฝ๊ฒ ํตํฉํ ์ ์์ด์์ด๋ค. ๋ํ ์ผ๋ฐ์ ์ผ๋ก UI ์์๋ฅผ ์ผ์ผ์ด ๊ตฌํํ์ง ์๊ณ ๋ ์ผ๋ฐ์ ์ธ ์ฑ ๋์์ธ์ ๋น ๋ฅด๊ฒ ๊ตฌ์ถํ ์ ์๊ณ , ์ปค์คํ ๋ง์ด์ง์ด ํธ๋ฆฌํ๋ค.
- Center, Column, Row ๋ฅผ ์ฌ์ฉํ๊ณ mainAxisAlignment ์ฌ์ฉํ์ฌ ์ ๋ ฌ ๋ง์ถฐ๋ณด๊ธฐ
Center๋ก ๋ง์ท๊ธฐ ๋๋ฌธ์ ํ๋ฉด ์์์ ์๋์ ๊ฐ์ด ๊ฐ์ด๋ฐ ๋ถ๋ถ์ ์์นํ ์ ์์๊ณ , ์ฌ๊ธฐ์์๋ mainAxisAlignment ๋ฅผ ์ด์ฉํด ๊ฐ์ด๋ฐ ์ค์ ์ ์ ์งํ๋ค.
- ๋ณ์๋ฅผ ํ์ฉํ์ฌ ๋์ ์ผ๋ก ์นด์ดํ ํ๋ ๊ฐ ๋ง๋ค์ด๋ณด๊ธฐ
๋ณ์๋ ์ฌ์ฉํ ๋, $ ๋ฅผ ์ฌ์ฉํด์ ๋ถ๋ฌ์ฌ ์ ์๋ค.
children: [
Text(
'$count',
style: TextStyle(
color: Colors.black,
fontSize: 100,
)),
3. Conclusion
Flutter์์ ์ฌ๋ฌ ๊ธฐ๋ฅ์ ํ์ฉํด๋ณด๊ณ , ๊ทธ ์์์ ์๋ก์ด ์ธ์ฌ์ดํธ๋ฅผ ์ป๊ธฐ ์ํด ๋ค์๊ณผ ๊ฐ์ด ๋ด์ฉ์ ์ ๋ฆฌํด์ ๊ธฐ๋กํฉ๋๋ค.