사용자 화면 문구·표본 데이터 · 퀘스트 참여 흐름 · HOME 진입 구획 · 미니맵 · 공통 확인 창 배치 수정

This commit is contained in:
Sn-Kinos
2026-10-05 00:44:39 +09:00
parent c8d29d032b
commit 8a0297eb92
66 changed files with 1812 additions and 959 deletions
+60 -8
View File
@@ -172,9 +172,15 @@ void main() {
// 검토회신서 3절 — *「선택 행성 정보가 행성과 연계된 HUD 가 아니라 화면
// 최상단 고정 패널 형태」*. 고정 패널로 되돌아가면 여기서 깨진다.
testWidgets('HUD 는 화면이 아니라 행성에 붙어 움직인다', (tester) async {
tester.view.physicalSize = const Size(1200, 2000);
tester.view.devicePixelRatio = 2.0;
addTearDown(tester.view.reset);
await _pump(tester, _galaxy());
// 가운데 내 행성은 궤도를 돌지 않는다 — 궤도 위 행성을 골라 돌린다.
await tester.tap(find.byKey(const ValueKey('newjeans')));
await _settle(tester);
final before = tester.getCenter(find.text('RANK'));
await tester.drag(find.byType(InteractiveViewer), const Offset(-90, -70));
await tester.drag(find.byType(InteractiveViewer), const Offset(-200, 0));
await _settle(tester);
final after = tester.getCenter(find.text('RANK'));
expect(
@@ -275,17 +281,63 @@ void main() {
await _pump(tester, _galaxy());
expect(find.text('RANK'), findsOneWidget);
// 맵을 끝까지 밀어 내 행성을 화면 밖으로 보낸다.
for (var i = 0; i < 6; i++) {
await tester.drag(
find.byType(InteractiveViewer),
const Offset(-400, -400),
);
await _settle(tester);
// 끝까지 확대하며 두 손가락을 오른쪽 아래로 끌어 내 행성을 화면 밖으로 보낸다
// (한 손가락 팬은 없다 — 확대 제스처의 초점 이동만 맵을 옮긴다).
final viewer = find.byType(InteractiveViewer);
final origin = tester.getTopLeft(viewer);
final a = await tester.startGesture(origin + const Offset(4, 4));
final b = await tester.startGesture(
origin + const Offset(24, 24),
pointer: 7,
);
for (var i = 1; i <= 10; i++) {
await b.moveTo(origin + Offset(24.0 + i * 32, 24.0 + i * 32));
await a.moveTo(origin + Offset(4.0 + i * 20, 4.0 + i * 20));
await tester.pump();
}
await a.up();
await b.up();
await _settle(tester);
expect(find.text('RANK'), findsNothing);
});
// 10/4 실기기 — 가로로 끌면 궤도가 돌지 않고 장면이 통째로 밀려 빈 화면이 됐다.
testWidgets('가로로 끌면 장면은 제자리에서 궤도가 돌고, 손을 떼도 관성으로 더 돈다', (tester) async {
await _pump(tester, _galaxy());
final viewer = tester.widget<InteractiveViewer>(
find.byType(InteractiveViewer),
);
final view = viewer.transformationController!;
final before = view.value.clone();
final mine = tester.getCenter(find.text('RANK'));
for (var i = 0; i < 4; i++) {
await tester.fling(
find.byType(InteractiveViewer),
const Offset(-300, 0),
1500,
);
await tester.pump();
}
expect(view.value, before, reason: '끌기는 맵을 옮기지 않는다(팬 없음)');
expect(
(tester.getCenter(find.text('RANK')) - mine).distance,
lessThan(1),
reason: '가운데 내 행성은 화면 밖으로 밀려나지 않는다',
);
// 관성 — 손을 뗀 뒤에도 기본 표류보다 빠르게 돌다가 감속한다.
final state = tester.state(find.byType(GalaxyScreen));
final clock = (state as dynamic).clockForTest as GalaxyClock;
final v0 = clock.velocity;
expect(v0.abs(), greaterThan(GalaxyMotion.idleSpin));
await _settle(tester);
expect(
(clock.velocity - GalaxyMotion.idleSpin).abs(),
lessThan((v0 - GalaxyMotion.idleSpin).abs()),
);
});
testWidgets('GALAXY 는 좌측 하단, 돋보기는 우측 하단', (tester) async {
await _pump(tester, _galaxy());
expect(find.text('GALAXY'), findsOneWidget);