refactor(app): 앱 초기화 및 프론트 화면 개선

- app.dart 코드 간소화
- front_screen.dart 기능 확장
This commit is contained in:
JiWoong Sul
2026-01-02 16:52:52 +09:00
parent 86b14427f6
commit afbd4e6853
2 changed files with 93 additions and 149 deletions

View File

@@ -2,6 +2,7 @@ import 'package:flutter/material.dart';
import 'package:asciineverdie/data/game_text_l10n.dart' as game_l10n;
import 'package:asciineverdie/l10n/app_localizations.dart';
import 'package:asciineverdie/src/app.dart' show SavedGamePreview;
import 'package:asciineverdie/src/features/front/widgets/hero_vs_boss_animation.dart';
import 'package:asciineverdie/src/shared/retro_colors.dart';
import 'package:asciineverdie/src/shared/widgets/retro_widgets.dart';
@@ -13,6 +14,7 @@ class FrontScreen extends StatelessWidget {
this.onLoadSave,
this.onHallOfFame,
this.hasSaveFile = false,
this.savedGamePreview,
});
/// "New character" 버튼 클릭 시 호출
@@ -27,6 +29,9 @@ class FrontScreen extends StatelessWidget {
/// 세이브 파일 존재 여부 (새 캐릭터 시 경고용)
final bool hasSaveFile;
/// 저장된 게임 미리보기 정보
final SavedGamePreview? savedGamePreview;
/// 새 캐릭터 생성 시 세이브 파일 존재하면 경고 표시
void _handleNewCharacter(BuildContext context) {
if (hasSaveFile) {
@@ -91,6 +96,7 @@ class FrontScreen extends StatelessWidget {
onHallOfFame: onHallOfFame != null
? () => onHallOfFame!(context)
: null,
savedGamePreview: savedGamePreview,
),
],
),
@@ -181,11 +187,13 @@ class _ActionButtons extends StatelessWidget {
this.onNewCharacter,
this.onLoadSave,
this.onHallOfFame,
this.savedGamePreview,
});
final VoidCallback? onNewCharacter;
final VoidCallback? onLoadSave;
final VoidCallback? onHallOfFame;
final SavedGamePreview? savedGamePreview;
@override
Widget build(BuildContext context) {
@@ -211,6 +219,11 @@ class _ActionButtons extends StatelessWidget {
onPressed: onLoadSave,
isPrimary: false,
),
// 저장된 게임 정보 표시
if (savedGamePreview != null) ...[
const SizedBox(height: 6),
_SavedGameInfo(preview: savedGamePreview!),
],
const SizedBox(height: 12),
// 명예의 전당
if (onHallOfFame != null)
@@ -226,6 +239,39 @@ class _ActionButtons extends StatelessWidget {
}
}
/// 저장된 게임 미리보기 정보 위젯
class _SavedGameInfo extends StatelessWidget {
const _SavedGameInfo({required this.preview});
final SavedGamePreview preview;
@override
Widget build(BuildContext context) {
return Padding(
padding: const EdgeInsets.symmetric(horizontal: 8),
child: Row(
mainAxisAlignment: MainAxisAlignment.center,
children: [
const Icon(
Icons.person_outline,
size: 10,
color: RetroColors.textDisabled,
),
const SizedBox(width: 4),
Text(
'${preview.characterName} Lv.${preview.level} ${preview.actName}',
style: const TextStyle(
fontFamily: 'PressStart2P',
fontSize: 7,
color: RetroColors.textDisabled,
),
),
],
),
);
}
}
/// 카피라이트 푸터
class _CopyrightFooter extends StatelessWidget {
const _CopyrightFooter();