사용자 화면 문구·표본 데이터 · 퀘스트 참여 흐름 · HOME 진입 구획 · 미니맵 · 공통 확인 창 배치 수정
This commit is contained in:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user