Flutter κΈ°λ°μΌλ‘ κ°λ°λ μ€μκ° μ’μ μ 보 μ 곡 & μ¬μν λ°©μ§ μ±
Firebase κΈ°λ°μ μΈμ¦ λ° λ°μ΄ν° κ΄λ¦¬, λ€μν μ νΈλ¦¬ν° κΈ°λ₯ νμ¬

μν κΈ°κ°λ§λ€ λ°λ³΅λλ μ΄λμ€ "μ¬μν" λ¬Έμ λ νμλ€μ νμ΅ ν¨μ¨μ μ¬κ°νκ² μ ν΄ν©λλ€. μ리λ₯Ό μ°¨μ§ν΄λκ³ μ¬μ©νμ§ μλ μ’μμΌλ‘ μΈν΄ μ€μ μλ¦¬κ° λΆμ‘±ν΄μ§λ λ¬Έμ λ₯Ό ν΄κ²°νκ³ μ λ³Έ μ±μ κΈ°ννμ΅λλ€.
- μ€μκ° μ΄λμ€ μ’μ μ 보 μ 곡
- μ¬μ©μ μ’μ μ μ μ¬λΆ νμΈ λ° κ³΅μ
- λ€μν νμ΅ μ§μ κΈ°λ₯ λ΄μ₯ (λκΈ°λΆμ¬ μμ, λμΉ¨λ° μλ΄ λ±)
-
κ΅¬κΈ λ‘κ·ΈμΈκ³Ό AppBar μ¬μ©
-
μ¬μ©μ μ 보 λ° μ μ κ΄λ¦¬
-
λμκ΄ μ리 μμ½ λ° μ 보 νμΈ
provider
λ μ± μ 체μμ μ΄λμ€ μ’μ λ°μ΄ν°λ₯Ό ν¨μ¨μ μΌλ‘ 곡μ νκ³ , μ€μκ° λ³κ²½μ¬νμ λ°μνκΈ° μν΄ μ¬μ©λ©λλ€. Firebaseλ₯Ό λ°λ³΅ μ‘°ννμ§ μκ³ , λ©λͺ¨λ¦¬μ μ μ₯λ μνλ‘ μ± μ±λ₯κ³Ό λ°μμ±μ ν₯μμμΌ°μ΅λλ€.
βββ users/
β βββ {uid}/
β βββ email, name, message, uid
β βββ favorite/
β βββ {room_name}/
β βββ {seat_index}: true
βββ rooms/
β βββ {room_name}/
β βββ seats/
β βββ {seat_index}/
β βββ email: user_email
β βββ status: occupied | available

- κ° μ¬μ©μ κ³μ μ 보λ₯Ό μ μ₯νλ μ΅μμ 컬λ μ μ λλ€.
{uid}
λ₯Ό λ¬Έμ IDλ‘ μ¬μ©νλ©°, ν΄λΉ μ¬μ©μμ λνemail
,name
,message
,uid
λ±μ λ‘κ·ΈμΈ μ λ³΄κ° μ μ₯λ©λλ€.

- κ° μ¬μ©μ(
{uid}
) λ¬Έμ λ΄μ μ‘΄μ¬νλ μλΈμ»¬λ μ μ λλ€. - μ¬μ©μκ° μ¦κ²¨μ°ΎκΈ°ν μ’μ μ 보λ₯Ό
room_name
βseat_index
νμμΌλ‘ νΈλ¦¬ ꡬ쑰μ²λΌ μ μ₯ν©λλ€. - μ¦κ²¨μ°Ύλ μ’μμ ν¨μ¨μ μΌλ‘ λΉ λ₯΄κ² λΆλ¬μ€κΈ° μν΄ μ΅μ νλ ννλ‘ μ€κ³λμμ΅λλ€.

- μ΄λμ€ μ 보λ₯Ό μ μ₯νλ 컬λ μ μ λλ€.
- κ°
room_name
λ³ λ¬Έμκ° μ‘΄μ¬νλ©°, κ·Έ λ΄λΆμseats
컬λ μ μ΄ ν¬ν¨λ©λλ€.

- μ€μ μ΄λμ€ λ΄ κ° μ’μμ λν μ λ³΄κ° λ¬Έμλ‘ κ΅¬μ±λμ΄ μμ΅λλ€.
- κ°
seat_index
λ λ¬Έμ IDλ‘ μ¬μ©λλ©°,email
νλλ ν΄λΉ μ’μμ μ¬μ© μ€μΈ νμμ μ΄λ©μΌμ μλ―Έν©λλ€. status
νλλ μ’μμ νμ¬ μν (occupied
,available
)λ₯Ό λνλ λλ€.
π μ΄ κ΅¬μ‘°λ₯Ό κΈ°λ°μΌλ‘ μ±μμλ μ€μκ° μ’μ μν μ‘°ν, μν λ³κ²½, μ¦κ²¨μ°ΎκΈ° κΈ°λ₯ λ±μ ν¨μ¨μ μΌλ‘ ꡬνν μ μμ΅λλ€.

ν¨ν€μ§ | μ€λͺ | λ§ν¬ |
---|---|---|
google_sign_in | Google κ³μ λ‘κ·ΈμΈ | λ°λ‘κ°κΈ° |
firebase_auth | Firebase μΈμ¦ κΈ°λ₯ | λ°λ‘κ°κΈ° |
firebase_core | Firebase SDK μ΄κΈ°ν | λ°λ‘κ°κΈ° |
cached_network_image | λ€νΈμν¬ μ΄λ―Έμ§ μΊμ± | λ°λ‘κ°κΈ° |
flutter_svg | SVG μ΄λ―Έμ§ λ λλ§ | λ°λ‘κ°κΈ° |

ν¨ν€μ§ | μ€λͺ | λ§ν¬ |
---|---|---|
cloud_firestore | Firebase μ€μκ° NoSQL DB | λ°λ‘κ°κΈ° |
provider | μνκ΄λ¦¬ λꡬ | λ°λ‘κ°κΈ° |
shared_preferences | λ‘컬 λ°μ΄ν° μ μ₯ | λ°λ‘κ°κΈ° |
rxdart | μ€νΈλ¦Ό κΈ°λ° λ°μν μ²λ¦¬ | λ°λ‘κ°κΈ° |

ν¨ν€μ§ | μ€λͺ | λ§ν¬ |
---|---|---|
flutter_local_notifications | λ‘컬 μλ¦Ό κΈ°λ₯ | λ°λ‘κ°κΈ° |
timezone | μκ°λ κ΄λ¦¬ κΈ°λ₯ | λ°λ‘κ°κΈ° |

ν¨ν€μ§ | μ€λͺ | λ§ν¬ |
---|---|---|
youtube_player_flutter | YouTube μμ μ¬μ | λ°λ‘κ°κΈ° |
http | HTTP μμ² μ²λ¦¬ (YouTube Data API) | λ°λ‘κ°κΈ° |

ν¨ν€μ§ | μ€λͺ | λ§ν¬ |
---|---|---|
location | μμΉ μ 보 μ κ·Ό | λ°λ‘κ°κΈ° |
permission_handler | κΆν μμ² μ²λ¦¬ | λ°λ‘κ°κΈ° |
flutter_compass | λμΉ¨λ° λ°©ν₯ κ°μ§ | λ°λ‘κ°κΈ° |
math | μν κ³μ° (λμΉ¨λ° νμ ) | λ°λ‘κ°κΈ° |

Google λ‘κ·ΈμΈ β Home Page μ΄λ, SVG λ‘κ³ λ λλ§ μ μ©
μ¬μ© API:
google_sign_in
,firebase_auth
,flutter_svg

μ 체 μ΄λμ€ μμ½ + Drawer μ κ·Ό
μ¬μ© API:
provider
,cloud_firestore

κΈ°λ₯λ³ νμ΄μ§ λΌμ°ν (ν / μ¦κ²¨μ°ΎκΈ° / νλ‘ν / λκΈ°λΆμ¬ / μ€μ )

μ¦κ²¨μ°ΎκΈ°ν μ’μ 리μ€νΈλ·° νμ
μ¬μ© API:
cloud_firestore
,provider
μ’μ μν μ€μκ° νμΈ (π₯ μ¬μ© μ€ / π© μ¬μ© κ°λ₯), μν λ³κ²½ λ²νΌ λ ΈμΆ
μ¬μ© API:
cloud_firestore
,provider

μ μ νλ‘ν λ° GPS λ²νΌ, μ€μ μ§μ
μ¬μ© API:
shared_preferences
,location

μ¬μ©μ μμΉ β μ€μκ΄ λ°©ν₯ μλ΄, λμΉ¨λ° νμ
μ¬μ© API:
location
,flutter_compass
,math
,permission_handler

κ³΅λΆ μκ° μμ½ β μλ¦Ό & μ€ν±μμΉ κΈ°λ₯
μ¬μ© API:
flutter_local_notifications
,timezone
,shared_preferences

μ€μκ° μ νλΈ λμμ μ‘°ν λ° μ¬μ
μ¬μ© API:
http
,youtube_player_flutter

λ‘κ·Έμμ λ° μ΄μ© μ½κ΄ νμΈ κΈ°λ₯
λ²μ | κΈ°λ₯ |
---|---|
v1.5 | UI κ°μ , λ€ν¬ λͺ¨λ, μ½κ΄ μΆκ° |
v2.0 | μ μ / κ²½κ³ κΈ°λ₯, μ’μ μ΄λ ₯ μ‘°ν |
v3.0 | QR μ’μ μ²΄ν¬ κΈ°λ₯, λ²κ·Έ 리ν¬νΈ μμ€ν |
μ΄λ¦ | μν |
---|---|
λ§μμ¬ | νμ₯, μ 체 λ‘μ§ & UI, Firebase ꡬ쑰 μ€κ³, Provider μνκ΄λ¦¬, μλ¦Ό ꡬν |
μ΄ν¬μ€ | YouTube API, GPS + λμΉ¨λ° κΈ°λ₯ ꡬν |
λ€μν APIμ μΈλΆ ν¨ν€μ§μ νμ©μ ν΅ν΄ Flutter κ°λ° μ κ·Όλ²μ νμ λνμ΅λλ€. νμ κ³Όμ μμμ μν΅ λ₯λ ₯, ꡬ쑰 μ€κ³ μλμ μ±μ₯μν¨ λ»κΉμ νλ‘μ νΈμμ΅λλ€.
Flutterμ νμ₯μ±κ³Ό λμ μμμ 체λν μ μμμ΅λλ€.
- λμΉ¨λ° κΈ°λ₯ ꡬνμ
flutter_compass
μμ μ½λλ₯Ό κΈ°λ°μΌλ‘ μμ νμ¬ μ¬μ©νμμ΅λλ€.
μ°Έκ³ λ§ν¬