# 30. 통합 반응형 UI 개선 (Integrated Responsive UI Improvement) ## 1. 배경 (Background) 현재 UI는 모바일 화면을 기준으로 개발되었으나, 웹(Web) 환경에서 테스트 시 화면이 너무 커지거나 레이아웃이 어색해지는 문제가 있습니다. 사용자는 "웹에서 너무 커지는 것보다 태블릿에서 사용해도 문제가 되지 않을 정도의 해상도"를 원하며, `BottomNavigationBar`를 포함한 전체적인 UI가 웹 환경에서 어색하지 않게 조정되기를 원합니다. ## 2. 목표 (Objective) - **최대 너비 및 높이 제한 (Max Width & Height Constraint):** - 웹이나 태블릿 등 큰 화면에서 콘텐츠가 지나치게 늘어나는 것을 방지합니다. - **MaxWidth:** 600px (태블릿/모바일 적정 너비) - **MaxHeight:** 1000px (세로 비율 유지) - **전역 중앙 정렬 (Global Center Alignment):** - 앱의 모든 화면(`MainWrapper`, `CharacterSelectionScreen` 등)을 중앙에 배치하고, 남는 여백은 어두운 배경(검은색)으로 처리하여 몰입감을 높입니다. - **ResponsiveContainer 도입:** - 위 제약 조건을 쉽게 적용할 수 있는 재사용 가능한 위젯을 구현합니다. ## 3. 작업 상세 (Implementation Details) ### A. `lib/widgets/responsive_container.dart` 구현 - `maxWidth`와 `maxHeight`를 제한하고 중앙 정렬하는 래퍼 위젯. - 기본값: `maxWidth = 600.0`, `maxHeight = 1000.0`. ### B. 화면별 적용 1. **MainWrapper (`lib/screens/main_wrapper.dart`)**: - 전체 앱(`Scaffold` + `BottomNavigationBar`)을 `ResponsiveContainer`로 감싸서 하단 바도 함께 줄어들도록 처리. - 외부 배경은 `Colors.black`으로 설정. 2. **CharacterSelectionScreen (`lib/screens/character_selection_screen.dart`)**: - 동일하게 외부 배경과 `ResponsiveContainer` 적용. 3. **BattleScreen (`lib/screens/battle_screen.dart`)**: - `ResponsiveContainer` 내부에서 `Stack`과 플로팅 텍스트(`DamageEvent`, `EffectEvent`) 위치가 올바르게 계산되도록 `GlobalKey` 활용 및 좌표 보정 로직 적용. ## 4. 검증 (Verification) - **Web 빌드 테스트:** - 브라우저 창을 가로/세로로 크게 늘렸을 때, 앱 화면이 600x1000 박스 내에 유지되는지 확인. - `BottomNavigationBar`가 전체 너비로 늘어나지 않고 앱 너비에 맞춰지는지 확인. - 플로팅 텍스트가 캐릭터 위치에 정확히 뜨는지 확인.