bookquote

화면 설계 — 스플래시 /splash (이미 구현 — 역정리 + 개선 권고)

그룹 3. 입력 근거: lib/app/splash_screen.dart(코드 기준 사실), competitor-screen-analysis §5.8, DECISIONS 2026-05-10(/splash initialLocation). 현행 ≠ 권고는 §7의 “수정/보강 항목”으로 분리.

1. 목적 / 진입·이탈 / 라우트

2. 와이어프레임

┌─────────────────────────┐
│                         │
│        (책귀)            │  ← 권고: 워드마크. 현행은 없음
│         ◌               │  CircularProgressIndicator(color: accent500), 중앙
│                         │
└─────────────────────────┘

3. 상태 (코드 기준)

| 상태 | 처리 | 심각도 | |—|—|—| | isSupabaseReady == false | addPostFrameCallback으로 다음 프레임에 _resolve()/auth/login (키 미주입 빌드/테스트 방어) | 낮음 | | isSupabaseReady == true | Timer(500ms, _resolve) 안전망 + ref.listen(authStateProvider)whenData 이벤트 시 _resolve()(타이머보다 빠르면 즉시) | 낮음 | | _resolve() | _resolved 가드(1회만) + mounted 체크 → loggedIn = isSupabaseReady && supabase.auth.currentSession != nullcontext.go(loggedIn ? '/' : '/auth/login') | — | | (개선) hydrate가 500ms 초과 | 안전망이 먼저 발화 → 미로그인으로 잘못 판단 → /auth/login으로 → 직후 hydrate 완료 → onAuthStateChange_redirect 재실행 → /로 복귀. 사용자에게 로그인 화면 깜빡임 | 중간 (개선 항목) | | (개선) deep link 콜드스타트 | getInitialLink로 들어온 deep link payload를 스플래시가 인지·보존하는 경로 없음 — / 또는 /auth/login만 | 중간 (개선 항목) |

4. 인터랙션

5. 토큰 매핑

6. 재사용 / 신규

7. 엣지 / 접근성 + 수정·보강 항목

교차 관심사: ⑦ /splash는 인증 분기 이라 가드 대상 아님(자체). ② deep link payload 보존(개선 시). 양호(유지): _resolved 가드 · isSupabaseReady 분기 · ref.listen으로 이벤트 우선. 수정·보강 권고 (현행 ≠ 권고):

변경 이력