Files
2026-04-07 16:17:03 +09:00
..
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00
2026-04-07 16:17:03 +09:00

IYKYKA — Flutter 클라이언트

멀티 컨텍스트(일상·업무 등) 기반 메신저 IYKYKA의 모바일 앱입니다. 서버 REST API + WebSocket과 연동합니다.


실행 방법

프로젝트 루트의 README.md에 서버 기동 방법이 있습니다. 서버가 떠 있는 상태에서:

cd mobile
flutter pub get
flutter run --dart-define=API_BASE=http://127.0.0.1:8787
  • Android 에뮬레이터API_BASE=http://10.0.2.2:8787
  • sqflite 미지원으로 로컬 메시지 캐시 전체는 동작하지 않을 수 있음. Android / iOS / Windows 데스크톱 권장

기술 스택 (요약)

구분 사용
상태·DI flutter_riverpod
라우팅 go_router
HTTP dio (JWT 인터셉터)
소켓 web_socket_channel
로컬 DB sqflite (방별 메시지 캐시)
보안 저장소 flutter_secure_storage (토큰)
설정 shared_preferences (테마·알림 스위치 등)
푸시 firebase_core / firebase_messaging, 포그라운드는 flutter_local_notifications
앱 정보 package_info_plus (설정 화면 버전 표시)

구현된 기능

인증·세션

  • 회원가입 / 로그인, JWT 저장 및 API 자동 부착
  • 로그아웃 시 소켓 종료 후 로그인 화면으로 이동

컨텍스트·홈

  • 컨텍스트 목록·선택(일상 / 업무 등), 해당 컨텍스트 기준 방·멤버·내 프로필
  • 이메일 초대, 업무 컨텍스트 생성, 그룹 채팅방 만들기
  • 하단 탭: 대화 / 멤버 / 내 프로필

채팅

  • WebSocket 실시간 메시지, 방 구독
  • 오프라인/끊김 시 전송 실패 메시지를 메모리 큐에 쌓았다가 연결 복구 후 순차 전송
  • 1:1 방: 상대 입력 중 표시(타이핑 이벤트·디바운스), 읽음 표시(서버 읽음 상태 + WS 갱신)
  • 메시지 읽음 처리(마지막 메시지 기준) API 호출
  • 로컬 sqflite에 방별 메시지 캐시(동기화·오프라인 열람 보조)

검색

  • 메시지 / 방 / 친구 탭으로 구분, 클라이언트 측 필터(쿼리 문자열)

설정

  • 앱 이름·버전(package_info_plus)
  • 테마: 시스템 / 라이트 (OS 다크여도 앱은 라이트 토스 스타일 유지)
  • 푸시 알림 스위치(SharedPreferences; 켜진 경우 FCM 초기화·토큰 서버 등록 시도)
  • 로그아웃

푸시(FCM)

  • Firebase 초기화 실패 시에도 앱 기동은 계속(미설정·플레이스홀더 firebase_options 대비)
  • FCM 토큰을 서버 registerPushToken으로 등록, 토큰 갱신 시 재등록
  • 포그라운드 수신 시 로컬 알림 표시(설정 가능 범위 내)

UI

  • 토스 느낌의 라이트 테마(theme/toss_theme.dart)

검증 명령

dart analyze lib
flutter test

참고

  • 서버에서 실제 원격 푸시 발송(Firebase Admin 등)은 별도 연동 단계일 수 있으며, 클라이언트는 토큰 등록까지 동작하도록 구성되어 있습니다.
  • 실제 배포·스토어 빌드 전에는 firebase_options.dart 및 Android/iOS Firebase 설정을 프로젝트에 맞게 교체해야 합니다.