앱 개요 (novato_app · Flutter)

상위: · 관련: 앱-더보기메뉴 · 앱-StatPad · 앱-정리후보 · 웹-개요

한 줄 요약

Novato 앱은 웹앱(React)을 웹뷰로 감싸고, 상단 우측 ”…” 팝업 메뉴로 웹에서 못 하는 **네이티브 특수 기능(StatPad)**을 얹은 하이브리드 앱이다. 현재 v1.0.2.

구조

  • 엔트리: lib/main.dart main() — dotenv 로드 → Supabase 초기화 → 권한 요청 → 실행.
  • 스플래시 → 홈: SplashScreen이 시작 즉시 웹뷰를 프리로딩(novato.netlify.app), 로딩 완료 시 NovatoHomePage로 교체.
  • 메인 스캐폴드: NovatoHomePage.build()
    • body = 웹뷰: WebviewScreen이 React 웹앱을 표시. (baseUrl은 React 고정 — Streamlit 전환 옵션은 v1.0.0에서 제거)
    • AppBar 우측: ”…” 팝업 메뉴(앱-더보기메뉴) + 상시 아이콘 2개(신문·유튜브).

데이터/서비스

  • 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가 R2 version.json 조회.
  • 수동 확인은 어떤 상위 버전이든(패치 포함) 감지·다운로드 (_isNewerVersion, 전체 X.Y.Z 비교).
  • “강제 APK 다운로드” 버튼: 버전 비교 무관하게 최신 APK 바로 다운로드(재설치용).
  • ‘조용한 업데이트’(major/minor만 알림)는 공지(announcement) 시스템 운영으로 처리 — 코드가 아님. (※ 이전에 major/minor만 감지하도록 잘못 넣었다가 v1.0.1에서 전체 감지로 복원)