2.0 KiB
2.0 KiB
46. 상점 시스템 리팩토링 및 예외 처리 (Shop System Refactoring & Error Handling)
1. 목표 (Goal)
BattleProvider에 집중된 상점 관련 로직을ShopProvider로 분리하여 **관심사의 분리(Separation of Concerns)**를 실현합니다.- 아이템 획득(보상/구매) 시 인벤토리 가득 참이나 골드 부족 등의 예외 상황에 대해 명확한 에러 메시지(UI 피드백)를 제공합니다.
2. 구현 상세 (Implementation Details)
A. 상점 로직 분리 (ShopProvider)
- 파일:
lib/providers/shop_provider.dart생성. - 이동된 기능:
generateShopItems: 스테이지 티어에 따른 상점 아이템 목록 생성.rerollShopItems: 골드 소모 후 아이템 목록 갱신.buyItem: 골드 차감 및 인벤토리 추가 로직.
- 구조 변경:
BattleProvider는 더 이상BuildContext를 직접 참조하거나 상점 상태를 관리하지 않습니다.main.dart에서ChangeNotifierProxyProvider를 사용하여ShopProvider를BattleProvider에 주입(Injection)합니다.
B. 예외 처리 및 UI 피드백
- 반환값 변경 (
bool):BattleProvider.selectReward: 인벤토리 가득 찰 시false반환.ShopProvider.buyItem: 골드 부족 또는 인벤토리 가득 찰 시false반환.
- UI 반영 (
BattleScreen,ShopUI):- 메서드가
false를 반환할 경우ScaffoldMessenger를 통해 붉은색SnackBar로 에러 메시지를 출력합니다. - 예: "Inventory is full! Cannot take item.", "Purchase failed! Check inventory or gold."
- 메서드가
3. 결과 (Result)
- 코드 품질: 거대해지던
BattleProvider의 책임을 분산시켜 유지보수성을 높였습니다. - 안정성:
BattleProvider의BuildContext의존성을 제거하여 잠재적인 컨텍스트 관련 오류를 해결했습니다. - 사용자 경험: 아이템 획득 실패 시 명확한 피드백을 제공하여 답답함을 해소했습니다.