generated from ttipo/project-base
35fcf5e4ef
앱 1단계의 바탕이다(계약 1절 "앱 로그인" — 서버는 다음 차례, 지금은 가짜 서버로 시험한다). - 토큰: 리프레시 토큰은 보안 저장소에만, 액세스 토큰은 메모리에만. 첫 실행 표시가 없으면 남은 토큰을 지우고, 안드로이드 백업을 끈다. 보안 저장소 일은 차례로 한다 - 인터셉터: 401 이면 갱신 한 번(동시 401 묶음) 뒤 다시 보내기, AUTH_010 은 me 를 다시 받아 그 단계로, 미리 갱신 30초 전 · 만료는 응답 Date 로, 세션 세대가 바뀐 뒤의 응답은 조용히 버린다, 비밀이 든 요청의 실패 예외는 본문 · Bearer 를 지운다 - 세션: 로그인 · 코드 · 새 비밀번호 · 2단계 켜기 단계의 상태와 늦은 결과 버리기(버린 로그인의 토큰은 조용히 logout), 로그아웃은 메모리부터 비운다, 유예 응답이면 세션 끝 + 조용한 logout - 모듈 틀: go_router StatefulShellRoute 와 아래 탭 막대 — 모듈 목록은 웹 app-modules.ts 와 짝, 첫 판은 [메일 · 설정]. 모듈끼리 import 하지 않는다 - Riverpod 자동 다시 하기를 끈다, Pretendard 1.3.9(OFL), 확정 글자 크기, 시험 126건 - 판은 Flutter 3.41.9(Dart 3.11.5) — pubspec 의 sdk 하한과 lock 을 함께 리뷰 세 번 반영(AUTH_010 다시 보내기 · 늦은 응답 · 저장 실패 · 로그아웃 차례 · 비밀이 실린 객체 등). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
65 lines
2.3 KiB
YAML
65 lines
2.3 KiB
YAML
name: arasystem_app
|
|
description: "ARA SYSTEM 그룹웨어 모바일 앱"
|
|
# pub.dev 에 올리지 않는 사내 앱이다.
|
|
publish_to: 'none'
|
|
|
|
# 앱 판 — build-name(1.0.0)은 Android versionName · iOS CFBundleShortVersionString,
|
|
# build-number(+1)는 Android versionCode · iOS CFBundleVersion 이 된다.
|
|
# 서버에 보내는 User-Agent 의 판(ARASYSTEM-App/<판>)도 build-name 이다 (core/api/user_agent.dart).
|
|
version: 1.0.0+1
|
|
|
|
environment:
|
|
# Flutter 3.41.9 의 Dart — 판 고정은 .claude/skills/flutter/SKILL.md "Flutter 판"
|
|
sdk: ^3.11.5
|
|
|
|
# 새 패키지는 pub.dev 배포 뒤 2주가 지난 판만 고른다 (보안 규칙 "의존성"의 2주 규칙과 같다).
|
|
dependencies:
|
|
flutter:
|
|
sdk: flutter
|
|
# 한국어 시스템 문구(복사 · 붙여 넣기 메뉴 · 날짜 고르기) — locale: ko
|
|
flutter_localizations:
|
|
sdk: flutter
|
|
|
|
cupertino_icons: ^1.0.8
|
|
# 기기 정보(Android 판 · 기종) — User-Agent 만들기
|
|
device_info_plus: ^13.3.0
|
|
dio: ^5.9.2
|
|
flutter_dotenv: ^5.2.1
|
|
flutter_riverpod: ^3.3.1
|
|
flutter_secure_storage: ^10.0.0
|
|
# 화면 이동 — redirect 하나가 세션 상태로 화면을 고른다 (core/router/)
|
|
go_router: ^17.5.0
|
|
# 날짜 · 숫자 형식 — flutter_localizations 가 이 판으로 고정한다
|
|
intl: 0.20.2
|
|
# 앱 판 — User-Agent 만들기
|
|
package_info_plus: ^10.2.2
|
|
# 첫 실행 표시 하나만 둔다 — 토큰은 여기에 두지 않는다 (core/storage/first_run_marker.dart)
|
|
shared_preferences: ^2.5.6
|
|
|
|
dev_dependencies:
|
|
flutter_test:
|
|
sdk: flutter
|
|
flutter_lints: ^6.0.0
|
|
|
|
flutter:
|
|
uses-material-design: true
|
|
|
|
assets:
|
|
# 런타임 환경변수 — flutter_dotenv 로 읽는다 (API_URL 만 — 앱 안에 그대로 들어가니 비밀은 넣지 않는다)
|
|
- .env
|
|
# 글꼴 라이선스 — 설정의 [오픈소스 라이선스]에 보인다 (core/theme/app_fonts.dart)
|
|
- assets/licenses/pretendard-ofl.txt
|
|
|
|
# Pretendard 1.3.9 (SIL OFL 1.1) — 웹(frontend)과 같은 글꼴. 정적 OTF 넷만 넣는다
|
|
fonts:
|
|
- family: Pretendard
|
|
fonts:
|
|
- asset: assets/fonts/Pretendard-Regular.otf
|
|
weight: 400
|
|
- asset: assets/fonts/Pretendard-Medium.otf
|
|
weight: 500
|
|
- asset: assets/fonts/Pretendard-SemiBold.otf
|
|
weight: 600
|
|
- asset: assets/fonts/Pretendard-Bold.otf
|
|
weight: 700
|