Google์์ ๊ฐ๋ฐํ ์คํ ์์ค UI ์ํํธ์จ์ด ๊ฐ๋ฐ ๋๊ตฌ
WEB
Android App
iOS App
์์ฉ ํ๋ก๊ทธ๋จ

๋น ๋ฅธ ์ค์น
1.
์๋๋ก์ด๋ ์คํ๋์ค ์ค์น
2.
cmdline tools ์ค์น
3.
๊ฐ์ ๋๋ฐ์ด์ค ์์ฑ
4.
Flutter SDK ์ค์น
Flutter ์ค์น

Android Studio

VSCODE

ํ๋ฌํฐ ์ญ์

Flutter ๊ฐ๋ฐํ๊ฒฝ ์ค์น ๊ฒฝ๋ก: C:\SETUP
์ญ์ ๋์ ๋ชฉ๋ก
ํญ๋ชฉ | ๊ฒฝ๋ก | ์ค๋ช
|
Flutter SDK | C:\SETUP\flutter\ | Flutter ํ๋ ์์ํฌ ๋ณธ์ฒด |
Flutter ์ค์นํ์ผ | C:\SETUP\flutter_windows_x.xx.x-stable.zip | Flutter 3.35.2 ์์ถ ํ์ผ |
Android Studio ์ค์นํ์ผ | C:\SETUP\android-studio-xxxx.x.x.xx-windows.exe | Android Studio ์ธ์คํจ๋ฌ |
Flutter ์ญ์

Flutter ์๊ฐ
ํ๋ฌํฐ์ ๋ํ์ฌ ์๊ฐํ๊ณ ํ๋ฌํฐ์ ํต์ฌ์ ์ธ ๋ด์ฉ์ ๋ํ์ฌ ์์๋ด
๋๋ค.
โข
ํ๋ฌํฐ๋?
โข
์ฃผ์ ํน์ง
โข
ํน์ฅ์
Flutter ์๊ฐ

ํ๋ฌํฐ ํ๋ก์ ํธ ๊ตฌ์ฑ ํ์ผ
ํ๋ก์ ํธ ๊ตฌ์ฑ ํ์ผ

Dart
ํ๋ก ํธ์๋(UI) ๊ฐ๋ฐ์ ์ค์ ์ ๋ ๊ฐ์ฒด์งํฅ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด
Dart ์จ๋ผ์ธ ์๋ํฐ
Dart

pub
Dart ์ธ์ด์ ํจํค์ง ๋งค๋์
Dart ํ๋ก์ ํธ์์ ์ข
์์ฑ์ ๊ด๋ฆฌํ๊ณ ํจํค์ง๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. Flutter ํ๋ก์ ํธ์์๋ pub์ ์ฌ์ฉํ์ฌ ํจํค์ง๋ฅผ ๊ด๋ฆฌํฉ๋๋ค.
๋ชฉ์ฐจ
pub

ํจ์

์
๋ ฅ, ์ฐ์ฐ, ๋ฐํ ๊ตฌ์กฐ๋ก ํน์ ์์
์ ์ํํ๋ ์ฝ๋์ ๋ชจ์
ํน์ง
โข
์ฝ๋์ ์ฌ์ฌ์ฉ์ฑ ํฅ์
โข
ํ๋ก๊ทธ๋จ์ ๊ตฌ์กฐํ ๋ฐ ๋ชจ๋ํ
ํจ์

์ปฌ๋ ์
์ปฌ๋ ์
์ ์ฌ๋ฌ ์์๋ฅผ ๋ด์ ์ ์๋ ์๋ฃ ๊ตฌ์กฐ
Dart์์๋ ์ฃผ๋ก ์ธ ๊ฐ์ง ์ปฌ๋ ์
์ ์ฌ์ฉํฉ๋๋ค: List, Set, ๊ทธ๋ฆฌ๊ณ Map.
1.
List
์ปฌ๋ ์

Widget & State

ํ๋ฌํฐ์ ๊ฐ์ฅ ๊ธฐ๋ณธ ์์์ธ Widget ๊ณผ State ๋ฅผ ์์๋ด
๋๋ค. ํ๋ฌํฐ ์ฑ์ ๊ฐ๋ฐํ๊ธฐ ์ํด์๋ ์ด ๋ ๊ฐ์ง ๊ฐ๋
์ ๋ช
ํํ ์ดํดํ๋ ๊ฒ์ด ์ค์ํฉ๋๋ค.
โข
Widget
โข
State
โข
Widget Type
โฆ
StatelessWidget
โฆ
StatefulWidget
Widget & State

MaterialApp
Material Design์ ๊ธฐ๋ฐ์ผ๋ก ์ค๊ณ๋, ํ๋ฌํฐ์์ ์ ๊ณตํ๋ ์ต์์ ์์ ฏ
๊ธฐ๋ณธ ์ค์
โข
์ ๋ชฉ:ย ์ฑ์ ์ ๋ชฉ์ ์ค์ ํฉ๋๋ค.
โข
ํ
๋ง:ย ์ฑ์ ์ ์ฒด์ ์ธ ๋์์ธ์ ๊ด๋ฆฌํฉ๋๋ค.
MaterialApp

Scalffold
๊ธฐ๋ณธ์ ์ธ ์ฑ์ ํ๋ฉด ๊ตฌ์ฑ ์์ ๋ด๋ ์ปจํ
์ด๋ ์์ ฏ
Scalffold ๊ตฌ์ฑ์์
โข
AppBar
โข
Body
Scaffold

BottomNavigationBar
โข
BottomNavigationBar ์์ ์ฝ๋
โข
BottomNavigationBar

Button

Flutter์์ ์ฌ์ฉ ๊ฐ๋ฅํ ๋ฒํผ ์์ ฏ์ ์ ๋ฆฌํด๋ดค์ด์! 
โข
โข
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โฆ
โข
Button
Dismissible

SharedPreferences
SharedPreferences๋ Flutter์์ ์ฌ์ฉ๋๋ ๋ก์ปฌ ๋ฐ์ดํฐ ์ ์ฅ ํด๋์ค๋ก, ์ฑ์ ์๊ตฌ์ ์ธ ์ํ๋ฅผ ์ ์ฅํ๊ณ ๊ฒ์ํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค. ์ฃผ๋ก ์ฑ ์ค์ , ์ฌ์ฉ์ ํ๋กํ ์ ๋ณด, ํ ํฐ ๋ฑ์ ์ ์ฅํ๋ ๋ฐ ์ฌ์ฉ๋ฉ๋๋ค.
โข
Android : XML ํ์ผ ํ์์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ ์ฅ
โข
iOS : plist ํ์ผ๋ก ์ ์ฅ
SharedPreferences

path provider
ํ๋ฌํฐ ์ฑ์์ ํ์ผ ์ ์ฅ ์์น๋ฅผ ์ฒ๋ฆฌํ ์ ์๊ฒ ์ง์ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
path provider

SQLite

ํ์ผ ๊ธฐ๋ฐ์ ๋ด์ฅํ(Embedded) ๋ฐ์ดํฐ๋ฒ ์ด์ค
โข
SQLite ํน์ง
โข
SQLite๊ฐ ์ฌ์ฉ๋๋ ๊ณณ
SQLite

convert
JSON ๋ฐ์ดํฐ ํ์ ๋ฑ ๋ค์ํ ๋ฐ์ดํฐ ํ์์ ์ฌ์ฉํ ์ ์๋ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ํจํค์ง
convert

http
ํ๋ฌํฐ์์ http ์์ฒญ (GET, POST, PUT, DELETE) ๋ฑ์ ์์ฒญ์ ํด์ฃผ๋ ํจํค์ง
http

dio
HTTP ์์ฒญ ์ฒ๋ฆฌ ๋ฐ ์ธํฐ์
ํฐ๋ฅผ ์ง์ํ๋ Dart ์ธ์ด ๊ธฐ๋ฐ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
Flutter์์ Dio๋ ๊ฐ๋ ฅํ๊ณ ์ ์ฐํ HTTP ๋คํธ์ํน ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค. Dio๋ฅผ ์ฌ์ฉํ๋ฉด HTTP ์์ฒญ์ ์ฝ๊ฒ ๋ง๋ค๊ณ ์์ ํ ์ ์์ต๋๋ค. ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ GET, POST, PUT, DELETE ๋ฑ์ ๋ชจ๋ HTTP ๋ฉ์๋๋ฅผ ์ง์ํ๋ฉฐ, ์ฟ ํค ๊ด๋ฆฌ, ํ์ผ ์
๋ก๋ ๋ฐ ๋ค์ด๋ก๋, ์์ฒญ ์ทจ์, ์์ฒญ ํ์์์ ๋ฑ์ ๊ณ ๊ธ ๊ธฐ๋ฅ๋ ์ ๊ณตํฉ๋๋ค.
dio

flutter_secure_storage
calendar_date_picker2 ๋ผ์ด๋ธ๋ฌ๋ฆฌ
calendar_date_picker2
flutter_multi_select_items
Flutter ๋ค์ด์ด๋ฆฌ ์ฑ ๋ง๋ค๊ธฐ

Flutter๋ก ํ์ผ ๊ธฐ๋ฐ ์ผ๊ธฐ์ฅ ์ฑ์ ์ฒ์๋ถํฐ ๋ง๋๋ ๊ณผ์ ์ ๋จ๊ณ๋ณ๋ก ๊ฐ๋ฐํด๋ณด์์.
๋ค์ด์ด๋ฆฌ ์ฑ

๊ฒ์ํ ์ฑ
โข
ํ๋ก์ ํธ ๊ตฌ์กฐ
โฆ
ํด๋ผ์ด์ธํธ
โฆ
์๋ฒ
โข
์ฝ๋
โฆ
board.dart
โฆ
main.dart
โฆ
main_screen.dart
โฆ
list_screen.dart
โฆ
read_screen.dart
โฆ
insert_screen.dart
โฆ
update_screen.dart
๊ฒ์ํ ์ฑ
์ํฌ๋ฆฟ ๊ฐค๋ฌ๋ฆฌ ์ฑ

Flutter๋ก SQLite ๊ธฐ๋ฐ ๋น๋ฐ ์จ๋ฒ ๊ฐค๋ฌ๋ฆฌ ์ฑ์ ๋ง๋ค์ด๋ณด์์.
๋ชฉ์ฐจ
1.
ํ๋ก์ ํธ ๊ฐ์
2.
ํ๋ก์ ํธ ์ด๊ธฐ ์ค์
์ํฌ๋ฆฟ ๊ฐค๋ฌ๋ฆฌ ์ฑ

๋ก๊ทธ์ธ ์ฑ

์ด๋ฒ ํ๋ก์ ํธ์์๋ Flutter(ํ๋ฌํฐ)์ Spring Boot(์คํ๋ง ๋ถํธ)๋ฅผ ํ์ฉํ์ฌ ๋ก๊ทธ์ธ ๊ธฐ๋ฅ์ด ํฌํจ๋ ์ฑ์ ๋ง๋ค์ด๋ณผ ๊ฒ์
๋๋ค.
ํ๋ก์ ํธ ๊ฐ์
โข
Frontend: Flutter๋ฅผ ์ฌ์ฉํ์ฌ ๋ชจ๋ฐ์ผ ์ฑ UI๋ฅผ ๊ฐ๋ฐํฉ๋๋ค.
โข
Backend: Spring Boot๋ฅผ ์ด์ฉํ์ฌ ํ์๊ฐ์
, ๋ก๊ทธ์ธ, JWT ์ธ์ฆ ๋ฑ ์๋ฒ ๊ธฐ๋ฅ์ ๊ตฌ์ถํฉ๋๋ค.
๋ก๊ทธ์ธ ์ฑ

Flutter x SpringSecurity x JWT
Flutter
pubspec.yaml
Flutter x SpringSecurity x JWT
Provider

Provider๋ Flutter์์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ ๊ณตํ๋ ์ํ ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
โข
ChangeNotifier๋ฅผ ํ์ฉํ ์ํ ๊ด๋ฆฌ๊ฐ ๊ฐ๋ฅํ๋ฉฐ, ์์กด์ฑ ์ฃผ์
(DI) ๊ธฐ๋ฅ๋ ์ง์
โข
๋น๊ต์ ๊ฐ๋จํ ์ฑ์์ ์ฌ์ฉํ๊ธฐ ์ข์ผ๋ฉฐ, Flutter ๊ณต์์ ์ผ๋ก ๊ถ์ฅํ๋ ๋ฐฉ์
Provider์ ํต์ฌ ๊ฐ๋
์ฃผ์ ๊ฐ๋
๊ฐ๋
| ์ค๋ช
|
ChangeNotifier | ์ํ ๋ณํ๋ฅผ ์๋ฆฌ๋ ํด๋์ค |
ChangeNotifierProvider | ChangeNotifier๋ฅผ UI์ ์ฐ๊ฒฐ |
Consumer | ์ํ ๋ณ๊ฒฝ์ ๊ฐ์งํ์ฌ UI ์
๋ฐ์ดํธ |
Provider.of() | Provider์์ ์ง์ ์ํ ๊ฐ์ ธ์ค๊ธฐ |
context.watch() | ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ์ฌ ๋น๋ |
context.read() | ์ํ ๋ณํ๋ฅผ ๊ฐ์งํ์ง ์๊ณ ์ฝ๊ธฐ |
Provider์ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ํน์ง
1. ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ
โข
ChangeNotifier๋ฅผ ์ฌ์ฉํ์ฌ ์ํ๋ฅผ ๋ณ๊ฒฝํ๊ณ UI์ ๋ฐ์
โข
notifyListeners()๋ฅผ ํธ์ถํ๋ฉด ์๋์ผ๋ก UI ์
๋ฐ์ดํธ
2. ์์กด์ฑ ์ฃผ์
(DI) ์ง์
Provider
Riverpod
: Flutter ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ

Riverpod์ Flutter ๊ณต์ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ธ Provider์ ๊ฐ์ ๋ ๋ฒ์ ์ผ๋ก, ๋ ์์ ํ๊ณ ๊ฐ๋ ฅํ ์ํ ๊ด๋ฆฌ๋ฅผ ์ ๊ณตํฉ๋๋ค.
Riverpod์ ์ฃผ์ ํน์ง
1.
์ ์ญ ์ํ ๊ด๋ฆฌ ๊ฐ๋ฅ
โข
Provider์ฒ๋ผ BuildContext๊ฐ ํ์ํ์ง ์์ โ ์ ์ญ์์ ์ํ ๊ด๋ฆฌ ๊ฐ๋ฅ
2.
์์ ํ ์ํ ๊ด๋ฆฌ
โข
StateNotifier๋ฅผ ์ฌ์ฉํด ๋ถ๋ณ ์ํ ๊ด๋ฆฌ ์ง์
โข
FutureProvider, StreamProvider๋ก ๋น๋๊ธฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๊ฐ๋ฅ
3.
์์กด์ฑ ์ฃผ์
(DI) ์ง์
4.
ref.watch, ref.read, ref.listen ํ์ฉ ๊ฐ๋ฅ
Riverpod ์ค์น
๋๋
Riverpod
GetX
: Flutter ์ํ๊ด๋ฆฌ, ๋ผ์ฐํ
, ์์กด์ฑ ์ฃผ์
๋ผ์ด๋ธ๋ฌ๋ฆฌ

GetX๋ Flutter์์ ์ํ๊ด๋ฆฌ, ๋ผ์ฐํ
, ์์กด์ฑ ์ฃผ์
(DI) ์ ํ ๋ฒ์ ํด๊ฒฐํ ์ ์๋ ๊ฐ๋ ฅํ๊ณ ๊ฐ๋ฒผ์ด ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
GetX์ ์ฃผ์ ํน์ง
GetX ์ค์น
GetX
Bloc (Business Logic Component)

Bloc(Business Logic Component)์ Flutter ๊ณต์ ํ์์ ์ง์ํ๋ ๊ฐ๋ ฅํ ์ํ๊ด๋ฆฌ ๋ผ์ด๋ธ๋ฌ๋ฆฌ์
๋๋ค.
์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ ๋ฐฉ์์ ์ฌ์ฉํ๋ฉฐ, ๋๊ท๋ชจ ํ๋ก์ ํธ์์ ๊ตฌ์กฐ์ ์ด๊ณ ์ ์ง๋ณด์๊ฐ ์ฌ์ด ์ฝ๋๋ฅผ ์์ฑํ๋ ๋ฐ ์ ํฉํฉ๋๋ค.
Bloc์ ํต์ฌ ๊ฐ๋
Cubit vs Bloc
โข
Cubit: ๊ฐ๋จํ ์ํ ๊ด๋ฆฌ (๋จ์ผ ์ํ ๋ณ๊ฒฝ)
โข
Bloc: ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ (์ฌ๋ฌ ์ด๋ฒคํธ ์ฒ๋ฆฌ ๊ฐ๋ฅ)
Bloc์ ์ฃผ์ ๊ธฐ๋ฅ๊ณผ ํน์ง
1. ์ด๋ฒคํธ ๊ธฐ๋ฐ ์ํ ๊ด๋ฆฌ
โข
Bloc์ ์ฌ์ฉํ๋ฉด **์ฌ์ฉ์์ ์
๋ ฅ(์ด๋ฒคํธ)**์ ๋ฐ์ ์๋ก์ด ์ํ๋ก ๋ณ๊ฒฝ
โข
์ด๋ฒคํธ์ ์ํ๊ฐ ๋ถ๋ฆฌ๋์ด ํ
์คํธ๊ฐ ์ฉ์ด
Bloc
์ฐธ์กฐ
ย D-U-N-S ๋ฒํธ ๋ฐ๊ธ
pub get failed (1; Because shared_data_app requires SDK version >=3.2.3 <4.0.0, version solving failed.)
The current Dart SDK version is 2.18.2.
Because shared_data_app requires SDK version >=3.2.3 <4.0.0, version solving failed.

์์ธ
shared_data_app ๋ฒ์ ํธํ ๊ด๋ จ
























