style(lint): flutter analyze 경고 91건 → 0건 전체 정리

- analysis_options.yaml: freezed/g.dart 생성 파일 분석 제외
- game_text_l10n.dart: if문 중괄호 추가, 불필요한 ${} 제거
- iap_service.dart: 불필요한 dart:typed_data import 제거
- pq_logic.dart, combat_text_frames.dart: dangling library doc → library; 추가
- save_picker_dialog.dart: __ → _ (unnecessary_underscores)
- desktop_equipment_panel.dart: 불필요한 import 제거
- test 파일: _localVar → localVar 네이밍, ignore_for_file 추가
This commit is contained in:
JiWoong Sul
2026-03-31 14:22:09 +09:00
parent 068d9da4bd
commit 68a5848510
10 changed files with 126 additions and 116 deletions

View File

@@ -1,7 +1,8 @@
// ignore_for_file: inference_failure_on_collection_literal
import 'dart:collection';
import 'dart:convert';
import 'package:asciineverdie/src/core/model/equipment_container.dart';
import 'package:asciineverdie/src/core/model/equipment_item.dart';
import 'package:asciineverdie/src/core/model/equipment_slot.dart';
import 'package:asciineverdie/src/core/model/item_stats.dart';
@@ -17,7 +18,7 @@ void main() {
// 헬퍼: 모든 필드가 채워진 GameSave 생성
// =========================================================================
GameSave _createFullSave() {
GameSave createFullSave() {
return GameSave(
version: kSaveVersion,
rngState: 12345,
@@ -144,10 +145,10 @@ void main() {
// =========================================================================
test('toJson() → fromJson() 라운드트립 — 모든 필드 보존', () {
final original = _createFullSave();
final original = createFullSave();
// jsonEncode → jsonDecode로 순수 Map 변환 (freezed 객체 제거)
final json = jsonDecode(jsonEncode(original.toJson()))
as Map<String, dynamic>;
final json =
jsonDecode(jsonEncode(original.toJson())) as Map<String, dynamic>;
final restored = GameSave.fromJson(json);
// traits 검증
@@ -184,10 +185,7 @@ void main() {
expect(restored.equipment.weapon, equals('Flaming Sword'));
expect(restored.equipment.shield, equals('Tower Shield'));
expect(restored.equipment.bestIndex, equals(0));
expect(
restored.equipment.weaponItem.rarity,
equals(ItemRarity.epic),
);
expect(restored.equipment.weaponItem.rarity, equals(ItemRarity.epic));
expect(restored.equipment.weaponItem.level, equals(10));
expect(restored.equipment.weaponItem.stats.atk, equals(50));
@@ -201,7 +199,10 @@ void main() {
expect(restored.progress.task.max, equals(100));
expect(restored.progress.quest.position, equals(3));
expect(restored.progress.exp.position, equals(500));
expect(restored.progress.currentTask.caption, equals('Executing a Goblin'));
expect(
restored.progress.currentTask.caption,
equals('Executing a Goblin'),
);
expect(restored.progress.currentTask.type, equals(TaskType.kill));
expect(
restored.progress.currentTask.monsterGrade,
@@ -252,7 +253,14 @@ void main() {
'version': 2,
'rng': 100,
'traits': {'name': 'OldHero', 'race': 'Elf', 'klass': 'Mage'},
'stats': {'str': 10, 'con': 10, 'dex': 10, 'int': 10, 'wis': 10, 'cha': 10},
'stats': {
'str': 10,
'con': 10,
'dex': 10,
'int': 10,
'wis': 10,
'cha': 10,
},
'inventory': {'gold': 500, 'items': []},
'equipment': {
'weapon': 'Ancient Sword',
@@ -291,7 +299,10 @@ void main() {
// 레거시 아이템은 level 1, common으로 변환
expect(restored.equipment.weaponItem.level, equals(1));
expect(restored.equipment.weaponItem.rarity, equals(ItemRarity.common));
expect(restored.equipment.weaponItem.slot, equals(EquipmentSlot.weapon));
expect(
restored.equipment.weaponItem.slot,
equals(EquipmentSlot.weapon),
);
// 버전 정보 보존
expect(restored.version, equals(2));
@@ -299,30 +310,34 @@ void main() {
test('v2 세이브에 monetization 없으면 null', () {
// jsonDecode로 순수 Map<String, dynamic> 생성 (타입 캐스팅 호환)
final legacyJson = jsonDecode(jsonEncode({
'version': 2,
'rng': 0,
'traits': {},
'stats': {},
'inventory': {'gold': 0, 'items': []},
'equipment': {
'weapon': 'Keyboard',
'shield': '',
'helm': '',
'hauberk': '',
'brassairts': '',
'vambraces': '',
'gauntlets': '',
'gambeson': '',
'cuisses': '',
'greaves': '',
'sollerets': '',
'bestIndex': 0,
},
'skills': [],
'progress': {},
'queue': [],
})) as Map<String, dynamic>;
final legacyJson =
jsonDecode(
jsonEncode({
'version': 2,
'rng': 0,
'traits': {},
'stats': {},
'inventory': {'gold': 0, 'items': []},
'equipment': {
'weapon': 'Keyboard',
'shield': '',
'helm': '',
'hauberk': '',
'brassairts': '',
'vambraces': '',
'gauntlets': '',
'gambeson': '',
'cuisses': '',
'greaves': '',
'sollerets': '',
'bestIndex': 0,
},
'skills': [],
'progress': {},
'queue': [],
}),
)
as Map<String, dynamic>;
final restored = GameSave.fromJson(legacyJson);
@@ -404,10 +419,7 @@ void main() {
'plot': {'pos': 0, 'max': 1},
'exp': {'pos': 0, 'max': 1},
'encumbrance': {'pos': 0, 'max': 1},
'taskInfo': {
'caption': 'Unknown task',
'type': 'nonexistent_type',
},
'taskInfo': {'caption': 'Unknown task', 'type': 'nonexistent_type'},
},
'queue': [
{
@@ -424,10 +436,7 @@ void main() {
// 알 수 없는 enum 값은 기본값으로 대체
expect(restored.progress.currentTask.type, equals(TaskType.neutral));
expect(restored.queue.entries.first.kind, equals(QueueKind.task));
expect(
restored.queue.entries.first.taskType,
equals(TaskType.neutral),
);
expect(restored.queue.entries.first.taskType, equals(TaskType.neutral));
});
});
@@ -448,9 +457,7 @@ void main() {
});
test('skills가 빈 배열이면 빈 스킬북', () {
final json = <String, dynamic>{
'skills': [],
};
final json = <String, dynamic>{'skills': []};
final restored = GameSave.fromJson(json);
@@ -494,9 +501,7 @@ void main() {
});
test('queue가 빈 배열이면 빈 큐', () {
final json = <String, dynamic>{
'queue': [],
};
final json = <String, dynamic>{'queue': []};
final restored = GameSave.fromJson(json);
@@ -504,9 +509,7 @@ void main() {
});
test('monetization null이면 null 유지', () {
final json = <String, dynamic>{
'monetization': null,
};
final json = <String, dynamic>{'monetization': null};
final restored = GameSave.fromJson(json);