refactor(app): 앱 초기화 및 프론트 화면 개선
- app.dart 코드 간소화 - front_screen.dart 기능 확장
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user