Figma 설명 프레임 반영 — 로그인·온보딩·스플래시 · HOME · GALAXY · 퀘스트·이클립스·알림
This commit is contained in:
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user