앱 개요 (novato_app · Flutter)
한 줄 요약
Novato 앱은 웹앱(React)을 웹뷰로 감싸고, 상단 우측 ”…” 팝업 메뉴로 웹에서 못 하는 **네이티브 특수 기능(StatPad)**을 얹은 하이브리드 앱이다. 현재 v1.0.2.
구조
- 엔트리:
lib/main.dartmain()— dotenv 로드 → Supabase 초기화 → 권한 요청 → 실행. - 스플래시 → 홈:
SplashScreen이 시작 즉시 웹뷰를 프리로딩(novato.netlify.app), 로딩 완료 시NovatoHomePage로 교체. - 메인 스캐폴드:
NovatoHomePage.build()- body = 웹뷰:
WebviewScreen이 React 웹앱을 표시. (baseUrl은 React 고정 — Streamlit 전환 옵션은 v1.0.0에서 제거) - AppBar 우측: ”…” 팝업 메뉴(앱-더보기메뉴) + 상시 아이콘 2개(신문·유튜브).
- body = 웹뷰:
데이터/서비스
- Supabase(PostgreSQL + Realtime)를 웹앱과 공유. 앱은 StatPad에서 스탯 기록·업로드, 웹앱은 조회·표시.
- 서비스 레이어(
lib/services/):supabase_service,league/game/player/player_stats_service,realtime_stats_service(실시간 송출),announcement_service,update_service(APK 업데이트 체크),video_cache_service.
배포 (deploy.sh)
- APK 빌드/서명/Cloudflare R2 업로드 + GitHub Release + git 태그. arm64 단일 ABI.
- versionCode =
X*10000 + Y*100 + Z(예: 1.0.2 → 10002). 현재 v1.0.2.
업데이트 체크 (v1.0.1 정정)
- 인앱 “업데이트 확인”(정보 다이얼로그) →
update_service.dart가 R2version.json조회. - 수동 확인은 어떤 상위 버전이든(패치 포함) 감지·다운로드 (
_isNewerVersion, 전체 X.Y.Z 비교). - “강제 APK 다운로드” 버튼: 버전 비교 무관하게 최신 APK 바로 다운로드(재설치용).
- ‘조용한 업데이트’(major/minor만 알림)는 공지(announcement) 시스템 운영으로 처리 — 코드가 아님. (※ 이전에 major/minor만 감지하도록 잘못 넣었다가 v1.0.1에서 전체 감지로 복원)