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μμ μ½λλ₯Ό κΈ°λ°μΌλ‘ μμ νμ¬ μ¬μ©νμμ΅λλ€.
μ°Έκ³ λ§ν¬










