feat(front): 프론트 화면 개선 및 설정 저장소 추가

- front_screen_animation.dart: 프론트 화면 애니메이션 추가
- settings_repository.dart: 설정 저장소 구현
- front/widgets/: 프론트 화면 위젯 분리
- mobile_carousel_layout.dart: 모바일 레이아웃 개선
- app.dart: 앱 설정 개선
- game_text_l10n.dart: 텍스트 추가
This commit is contained in:
JiWoong Sul
2025-12-23 18:52:46 +09:00
parent e6af7dd91a
commit 549851f693
10 changed files with 722 additions and 183 deletions

View File

@@ -39,6 +39,8 @@ class GamePlayScreen extends StatefulWidget {
required this.controller,
this.forceCarouselLayout = false,
this.forceDesktopLayout = false,
this.onThemeModeChange,
this.currentThemeMode = ThemeMode.system,
});
final GameSessionController controller;
@@ -49,6 +51,12 @@ class GamePlayScreen extends StatefulWidget {
/// 테스트 모드: 모바일에서도 데스크톱 3패널 레이아웃 강제 사용
final bool forceDesktopLayout;
/// 테마 모드 변경 콜백
final void Function(ThemeMode mode)? onThemeModeChange;
/// 현재 테마 모드
final ThemeMode currentThemeMode;
@override
State<GamePlayScreen> createState() => _GamePlayScreenState();
}
@@ -564,9 +572,24 @@ class _GamePlayScreenState extends State<GamePlayScreen>
},
notificationService: _notificationService,
specialAnimation: _specialAnimation,
onLanguageChange: (locale) {
onLanguageChange: (locale) async {
// 1. 현재 상태 저장
await widget.controller.pause(saveOnStop: true);
// 2. 로케일 변경
game_l10n.setGameLocale(locale);
setState(() {});
// 3. 화면 재생성 (전체 UI 재구성)
if (context.mounted) {
await widget.controller.resume();
Navigator.of(context).pushReplacement(
MaterialPageRoute<void>(
builder: (_) => GamePlayScreen(
controller: widget.controller,
currentThemeMode: widget.currentThemeMode,
onThemeModeChange: widget.onThemeModeChange,
),
),
);
}
},
onDeleteSaveAndNewGame: () async {
// 게임 루프 중지
@@ -578,6 +601,8 @@ class _GamePlayScreenState extends State<GamePlayScreen>
Navigator.of(context).pop();
}
},
currentThemeMode: widget.currentThemeMode,
onThemeModeChange: widget.onThemeModeChange,
),
// 사망 오버레이
if (state.isDead && state.deathInfo != null)