성운 성장률 표시 · 내 행성 칸 그림 수정

This commit is contained in:
Sn-Kinos
2026-10-05 17:48:30 +09:00
parent 3a3be4c3d3
commit 5238fc4ef3
4 changed files with 15 additions and 7 deletions
@@ -29,9 +29,11 @@ class GalaxyHomeScreen extends StatefulWidget {
/// 카드 그림 — HOME · 맵과 같이 팬덤 `stage` 로 고른다. Stage0 성운만 성운 그림이고 /// 카드 그림 — HOME · 맵과 같이 팬덤 `stage` 로 고른다. Stage0 성운만 성운 그림이고
/// 정식 행성은 시안 행성 그림(`image 8` · 파란 행성 벡터)을 칸마다 번갈아 쓴다. /// 정식 행성은 시안 행성 그림(`image 8` · 파란 행성 벡터)을 칸마다 번갈아 쓴다.
/// 예전엔 칸 순서로 골라 둘째 칸이 행성이어도 성운 그림이 됐다. /// 예전엔 칸 순서로 골라 둘째 칸이 행성이어도 성운 그림이 됐다.
static String cardImageOf(PlanetNode p, int i) => p.stage == 0 // ponytail: 행성마다 고정된 두 그림 중 하나(id 기준) — 칸 순서가 바뀌어도 같은 그림.
// 탄생 때 고른 모양 · 색 에셋은 최신 Figma 행성 에셋 교체(10/8)에서 연결한다.
static String cardImageOf(PlanetNode p, [int _ = 0]) => p.stage == 0
? 'assets/figma/nebula-card.png' ? 'assets/figma/nebula-card.png'
: (i.isEven : (p.id.codeUnits.fold<int>(0, (a, c) => a + c).isEven
? 'assets/figma/planet-detail-hero.png' ? 'assets/figma/planet-detail-hero.png'
: 'assets/figma/planet-earth.png'); : 'assets/figma/planet-earth.png');
+4
View File
@@ -248,8 +248,12 @@ class PlanetDetail {
this.ownerPhoto, this.ownerPhoto,
this.fpiUpdatedAt, this.fpiUpdatedAt,
this.joined = true, this.joined = true,
this.growthPop = 0,
}); });
/// 성운 누적 POP(`fandoms.growthPop`) — 성운 FPI 탭 「성운 성장률」의 분자.
final int growthPop;
/// 내가 이 행성/성운의 멤버인가(`fandoms/{id}/members/{uid}` 존재). 히어로의 /// 내가 이 행성/성운의 멤버인가(`fandoms/{id}/members/{uid}` 존재). 히어로의
/// 「가입중 / 가입하기」 알약이 이 값을 그린다(명세 §2.72 「가입 버튼 - 소속 상태」). /// 「가입중 / 가입하기」 알약이 이 값을 그린다(명세 §2.72 「가입 버튼 - 소속 상태」).
final bool joined; final bool joined;
@@ -408,7 +408,7 @@ class _FpiTab extends StatelessWidget {
padding: const EdgeInsets.all(16), padding: const EdgeInsets.all(16),
sliver: SliverList.list( sliver: SliverList.list(
children: [ children: [
const _NebulaFpi(), _NebulaFpi(pop: detail.growthPop),
], ],
), ),
), ),
@@ -499,10 +499,12 @@ class _FpiTab extends StatelessWidget {
/// ///
/// 「기여 현황」 카드(#1a1a1c r12 · 안쪽 12/16) — 성운 성장률 · 진행 막대 · 0 ~ 목표, /// 「기여 현황」 카드(#1a1a1c r12 · 안쪽 12/16) — 성운 성장률 · 진행 막대 · 0 ~ 목표,
/// 「실시간 기여 랭킹」 — 1위 왕관 · 빈 원 80 · 「아직 기여자가 없어요」. /// 「실시간 기여 랭킹」 — 1위 왕관 · 빈 원 80 · 「아직 기여자가 없어요」.
/// 목표는 원장 B-10 의 1,000 POP(사본 500,000 은 과거 수치). 성운 누적 POP 과 기여자 /// 목표는 원장 B-10 의 1,000 POP(사본 500,000 은 과거 수치). 분자는 서버 `growthPop`.
/// 목록은 상세 데이터에 아직 없어 0 · 빈 상태로 둔다. /// 기여자 목록은 상세 데이터에 아직 없어 빈 상태로 둔다.
class _NebulaFpi extends StatelessWidget { class _NebulaFpi extends StatelessWidget {
const _NebulaFpi(); const _NebulaFpi({required this.pop});
final int pop;
static TextStyle _b(double size, Color color, {double? height}) => TextStyle( static TextStyle _b(double size, Color color, {double? height}) => TextStyle(
fontFamily: AppFonts.body, fontFamily: AppFonts.body,
@@ -524,7 +526,6 @@ class _NebulaFpi extends StatelessWidget {
@override @override
Widget build(BuildContext context) { Widget build(BuildContext context) {
const pop = 0;
final target = defaultNebulaTargets.pop; final target = defaultNebulaTargets.pop;
final rate = pop * 100 ~/ target; final rate = pop * 100 ~/ target;
return Column( return Column(
@@ -169,6 +169,7 @@ class FirestorePlanetRepository implements PlanetRepository {
}, },
isNebula: stage == null ? nebula : stage == 0, isNebula: stage == null ? nebula : stage == 0,
members: fandom.intOr('memberCount'), members: fandom.intOr('memberCount'),
growthPop: fandom.intOr('growthPop'),
scores: [ scores: [
for (final metric in FpiMetric.values) for (final metric in FpiMetric.values)
FpiScore( FpiScore(