Skip to content

MASEOKJAE/AppDev_MyProject

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 

Repository files navigation

📚 열람실 사석화 방지 시스템 (Hot Spot)

Flutter 기반으로 개발된 실시간 좌석 정보 제공 & 사석화 방지 앱

Firebase 기반의 인증 및 데이터 관리, 다양한 유틸리티 기능 탑재

image

1️⃣ 문제 정의

시험 기간마다 반복되는 열람실 "사석화" 문제는 학생들의 학습 효율을 심각하게 저해합니다. 자리를 차지해놓고 사용하지 않는 좌석으로 인해 실제 자리가 부족해지는 문제를 해결하고자 본 앱을 기획했습니다.

  • 실시간 열람실 좌석 정보 제공
  • 사용자 좌석 점유 여부 확인 및 공유
  • 다양한 학습 지원 기능 내장 (동기부여 영상, 나침반 안내 등)

2️⃣ 초기 화면 설계

  • 구글 로그인과 AppBar 사용

    image image

  • 사용자 정보 및 업적 관리

    image image

  • 도서관 자리 예약 및 정보 확인

    image image


3️⃣ 상태 관리 설계 (provider)

🔗 Provider 공식 문서

provider는 앱 전체에서 열람실 좌석 데이터를 효율적으로 공유하고, 실시간 변경사항을 반영하기 위해 사용됩니다. Firebase를 반복 조회하지 않고, 메모리에 저장된 상태로 앱 성능과 반응성을 향상시켰습니다.


4️⃣ Firebase Database 설계

├── users/
│   └── {uid}/
│       ├── email, name, message, uid
│       └── favorite/
│           └── {room_name}/
│               └── {seat_index}: true
├── rooms/
│   └── {room_name}/
│       └── seats/
│           └── {seat_index}/
│               ├── email: user_email
│               └── status: occupied | available

📁 users Collection

image
  • 각 사용자 계정 정보를 저장하는 최상위 컬렉션입니다.
  • {uid}를 문서 ID로 사용하며, 해당 사용자에 대한 email, name, message, uid 등의 로그인 정보가 저장됩니다.

⭐ favorite Subcollection

image
  • 각 사용자({uid}) 문서 내에 존재하는 서브컬렉션입니다.
  • 사용자가 즐겨찾기한 좌석 정보를 room_nameseat_index 형식으로 트리 구조처럼 저장합니다.
  • 즐겨찾는 좌석을 효율적으로 빠르게 불러오기 위해 최적화된 형태로 설계되었습니다.

📁 rooms Collection

image
  • 열람실 정보를 저장하는 컬렉션입니다.
  • room_name 별 문서가 존재하며, 그 내부에 seats 컬렉션이 포함됩니다.

💺 seats Subcollection

image
  • 실제 열람실 내 각 좌석에 대한 정보가 문서로 구성되어 있습니다.
  • seat_index는 문서 ID로 사용되며, email 필드는 해당 좌석을 사용 중인 학생의 이메일을 의미합니다.
  • status 필드는 좌석의 현재 상태 (occupied, available)를 나타냅니다.

🔄 이 구조를 기반으로 앱에서는 실시간 좌석 상태 조회, 상태 변경, 즐겨찾기 기능 등을 효율적으로 구현할 수 있습니다.


5️⃣ 프로젝트 내 사용된 주요 패키지 & API 정리

🔐 로그인 / UI 관련

image
패키지 설명 링크
google_sign_in Google 계정 로그인 바로가기
firebase_auth Firebase 인증 기능 바로가기
firebase_core Firebase SDK 초기화 바로가기
cached_network_image 네트워크 이미지 캐싱 바로가기
flutter_svg SVG 이미지 렌더링 바로가기

☁️ 데이터베이스 및 상태관리

image
패키지 설명 링크
cloud_firestore Firebase 실시간 NoSQL DB 바로가기
provider 상태관리 도구 바로가기
shared_preferences 로컬 데이터 저장 바로가기
rxdart 스트림 기반 반응형 처리 바로가기

⏰ 알림 및 타이머

image
패키지 설명 링크
flutter_local_notifications 로컬 알림 기능 바로가기
timezone 시간대 관리 기능 바로가기

📺 동영상 및 외부 API

image
패키지 설명 링크
youtube_player_flutter YouTube 영상 재생 바로가기
http HTTP 요청 처리 (YouTube Data API) 바로가기

📍 위치 / 나침반

image
패키지 설명 링크
location 위치 정보 접근 바로가기
permission_handler 권한 요청 처리 바로가기
flutter_compass 나침반 방향 감지 바로가기
math 수학 계산 (나침반 회전) 바로가기

6️⃣ 주요 결과물 & 기능 소개

🔐 Login Page

image

Google 로그인 → Home Page 이동, SVG 로고 렌더링 적용

사용 API: google_sign_in, firebase_auth, flutter_svg

🏠 Home Page

image

전체 열람실 요약 + Drawer 접근

사용 API: provider, cloud_firestore

🍔 Drawer Menu

image

기능별 페이지 라우팅 (홈 / 즐겨찾기 / 프로필 / 동기부여 / 설정)

⭐ Favorites Page

image

즐겨찾기한 좌석 리스트뷰 표시

사용 API: cloud_firestore, provider

🪑 열람실 상세 Page

image image image image image

좌석 상태 실시간 확인 (🟥 사용 중 / 🟩 사용 가능), 상태 변경 버튼 노출

사용 API: cloud_firestore, provider

👤 My Page

image

유저 프로필 및 GPS 버튼, 설정 진입

사용 API: shared_preferences, location

🧭 Location Tracker

image

사용자 위치 → 오석관 방향 안내, 나침반 회전

사용 API: location, flutter_compass, math, permission_handler

⏱ Motivation Page (1)

image

공부 시간 예약 → 알림 & 스톱워치 기능

사용 API: flutter_local_notifications, timezone, shared_preferences

📺 Motivation Page (2)

image

실시간 유튜브 동영상 조회 및 재생

사용 API: http, youtube_player_flutter

⚙️ Setting Page

image

로그아웃 및 이용 약관 확인 기능


7️⃣ 개발 로드맵

버전 기능
v1.5 UI 개선, 다크 모드, 약관 추가
v2.0 업적 / 경고 기능, 좌석 이력 조회
v3.0 QR 좌석 체크 기능, 버그 리포트 시스템

8️⃣ 팀원 & 소감

이름 역할
마석재 팀장, 전체 로직 & UI, Firebase 구조 설계, Provider 상태관리, 알림 구현
이희준 YouTube API, GPS + 나침반 기능 구현

💬 마석재

다양한 API와 외부 패키지의 활용을 통해 Flutter 개발 접근법의 폭을 넓혔습니다. 협업 과정에서의 소통 능력, 구조 설계 역량을 성장시킨 뜻깊은 프로젝트였습니다.

💬 이희준

Flutter의 확장성과 도전 의식을 체득할 수 있었습니다.


📺 시연 영상

▶️ YouTube 시연 영상 보기


📜 참고 고지

  • 나침반 기능 구현은 flutter_compass 예제 코드를 기반으로 수정하여 사용하였습니다.
    참고 링크

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published