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 설정을 프로젝트에 맞게 교체해야 합니다.