game/prompt/44_settings_and_local_stora...

2.2 KiB

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 호출.
  • 불러오기: BattleProviderloadFromSave 메서드를 추가하여 JSON 데이터로부터 상태 복구.