# 44. 설정 페이지 및 로컬 저장 (Settings Page & Local Storage) ## 1. 목표 (Goal) - `BottomNavigationBar`에 "설정 (Settings)" 페이지를 추가합니다. - 설정 페이지에 "메인 메뉴로 나가기 (Return to Main Menu)" 및 "다시 시작하기 (Restart Game)" 버튼을 추가합니다. - 스테이지 클리어 시 진행 상황(스테이지, 턴, 플레이어 상태)을 로컬 스토리지(`shared_preferences`)에 자동 저장하는 기능을 구현합니다. - 메인 메뉴에 저장된 데이터가 있을 경우 "이어하기 (CONTINUE)" 버튼을 표시하고 기능을 연결합니다. ## 2. 구현 상세 (Implementation Details) ### 의존성 (Dependencies) - `shared_preferences` 패키지 추가. ### 로컬 저장소 (`SaveManager`) - **파일:** `lib/game/save_manager.dart` - **기능:** - `saveGame`: `BattleProvider`의 상태(스테이지, 턴, 플레이어 스탯, 인벤토리, 장비)를 JSON으로 직렬화하여 SharedPreferences에 저장. - `loadGame`: 저장된 데이터를 불러와 역직렬화. - `hasSaveData`: 저장 파일 존재 여부 확인. - `clearSaveData`: 저장 데이터 삭제 (리셋/디버그 용). ### 데이터 직렬화 (Data Serialization) - **수정된 클래스:** `Character`, `StatusEffect`. - **메서드:** `toJson()` 및 `fromJson()` 메서드 추가. - **아이템 처리:** `Item` 객체 자체를 저장하는 대신 ID를 저장하고, 로드 시 `ItemTable`을 통해 복구. ### UI 변경 사항 (UI Changes) - **설정 화면 (`SettingsScreen`):** - `lib/screens/settings_screen.dart` 생성. - 버튼: "게임 재시작 (Restart Game)", "메인 메뉴로 (Return to Main Menu)". - **메인 래퍼 (`MainWrapper`):** - `BottomNavigationBar`에 "Settings" 탭 추가. - **메인 메뉴 (`MainMenuScreen`):** - `StatefulWidget`으로 변환. - 초기화 시 저장 데이터 확인. - 저장 데이터 존재 시 "이어하기 (CONTINUE)" 버튼 표시. ### 전투 로직 통합 (Battle Logic Integration) - **자동 저장:** `_prepareNextStage` (스테이지 클리어 후 실행) 내부에서 `SaveManager.saveGame` 호출. - **불러오기:** `BattleProvider`에 `loadFromSave` 메서드를 추가하여 JSON 데이터로부터 상태 복구.