Figma 설명 프레임 반영 — 로그인·온보딩·스플래시 · HOME · GALAXY · 퀘스트·이클립스·알림

This commit is contained in:
Sn-Kinos
2026-10-06 03:03:20 +09:00
parent 64825e72b0
commit ecf5998725
77 changed files with 2703 additions and 640 deletions
@@ -14,6 +14,7 @@ import '../home/home_screen.dart' show formatPop;
import '../quest/quest_evidence.dart' show ShakeProbe, deviceShakes;
import 'eclipse_data.dart';
import '../../core/i18n/app_locale.dart';
import '../../core/ui/sheet_route.dart';
/// 「흔들어 방어」 — 팬덤 공동 Shake 참여 화면.
///
@@ -35,10 +36,15 @@ class EclipseDefendScreen extends StatefulWidget {
required this.repository,
required this.fandomId,
this.shakes = deviceShakes,
this.nebula = false,
});
final EclipseRepository repository;
/// 대상 팬덤이 아직 성운인가 — 명세 `516:88158` *온보딩 행성/성운 - 이미지* · `516:88185`
/// *행성/성운 - 사용자 행성/성운 이미지*. 성운이면 성운 그림으로 그린다.
final bool nebula;
/// 흔들기 입력. 테스트는 가짜 스트림을 넣는다 — 방어 수단은 **Shake 하나**다(FX §5).
final ShakeProbe shakes;
@@ -326,8 +332,8 @@ class _EclipseDefendScreenState extends State<EclipseDefendScreen>
),
),
const SizedBox(height: 24),
const Flexible(
child: SizedBox(height: 400, child: _ErodingPlanet()),
Flexible(
child: SizedBox(height: 400, child: _ErodingPlanet(image: _imageOf(widget.nebula))),
),
const Spacer(),
// `516:88184` 남은 시간 노출 영역 — 하단 정렬, 끝나면 방어 화면으로.
@@ -435,7 +441,11 @@ class _EclipseDefendScreenState extends State<EclipseDefendScreen>
Flexible(
child: SizedBox(
height: 400,
child: _DefendPlanet(remaining: remaining, pending: _pending),
child: _DefendPlanet(
remaining: remaining,
pending: _pending,
image: _imageOf(widget.nebula),
),
),
),
const Spacer(),
@@ -620,6 +630,23 @@ class _EclipseTickerState extends State<EclipseTicker> {
}
const _planet = AssetImage('assets/figma/planet-home.png');
const _nebula = AssetImage('assets/figma/nebula-home.png');
AssetImage _imageOf(bool nebula) => nebula ? _nebula : _planet;
/// 이클립스 상세로 가는 길 — 아래에서 올라와 아래로 닫힌다(명세 `516:88158` *하단 move out*).
/// HOME 버튼 · 배너(HOME · 행성 상세 · GALAXY)가 모두 이 경로를 쓴다.
Route<void> eclipseDefendRoute({
required EclipseRepository repository,
required String fandomId,
bool nebula = false,
}) => SheetRoute<void>(
builder: (_) => EclipseDefendScreen(
repository: repository,
fandomId: fandomId,
nebula: nebula,
),
);
// 사본 좌표(프레임 원점 x10 · y220 기준).
Widget _at(double x, double y, double w, double h, Widget child) =>
@@ -629,9 +656,11 @@ Widget _at(double x, double y, double w, double h, Widget child) =>
///
/// 행성(240) 양옆에 흐린 사본(`image 9~12`, 흐림 4)을 겹쳐 그림자가 번지는 모습이다.
class _ErodingPlanet extends StatelessWidget {
const _ErodingPlanet();
const _ErodingPlanet({required this.image});
static Widget _shadow(double x, double y, double size, {double blur = 0}) =>
final AssetImage image;
Widget _shadow(double x, double y, double size, {double blur = 0}) =>
_at(
x,
y,
@@ -639,9 +668,9 @@ class _ErodingPlanet extends StatelessWidget {
size,
ImageFiltered(
imageFilter: ImageFilter.blur(sigmaX: blur, sigmaY: blur),
child: const ColorFiltered(
colorFilter: ColorFilter.mode(Color(0xB3141414), BlendMode.srcATop),
child: Image(image: _planet),
child: ColorFiltered(
colorFilter: const ColorFilter.mode(Color(0xB3141414), BlendMode.srcATop),
child: Image(image: image),
),
),
);
@@ -658,7 +687,7 @@ class _ErodingPlanet extends StatelessWidget {
_shadow(27, 347, 192, blur: 2),
_shadow(47, 320, 220),
_shadow(108, 320, 220),
_at(67.5, 300, 240, 240, const Image(image: _planet)),
_at(67.5, 300, 240, 240, Image(image: image)),
],
),
),
@@ -671,7 +700,13 @@ class _ErodingPlanet extends StatelessWidget {
/// `Group 572` 그라디언트 원 · `516:88231`)는 잔여 시간 비율 [remaining] 이고, 운석은
/// 시간이 흐를수록(1 − [remaining]) 행성 쪽으로 다가온다.
class _DefendPlanet extends StatelessWidget {
const _DefendPlanet({required this.remaining, required this.pending});
const _DefendPlanet({
required this.remaining,
required this.pending,
required this.image,
});
final AssetImage image;
/// 남은 시간 비율 1 → 0.
final double remaining;
@@ -719,7 +754,7 @@ class _DefendPlanet extends StatelessWidget {
280,
CustomPaint(painter: _RemainingRing(remaining)),
),
_at(67.5, 300, 240, 240, const Image(image: _planet)),
_at(67.5, 300, 240, 240, Image(image: image)),
// 좌상단 운석(`Group 573`)은 내보낸 자산이 없어 `Group 575` 를 뒤집어 쓴다.
_meteor(
38,