fix: 플로팅 네비게이션 바 렌더링 문제 해결

- SMS 화면에서 그림자가 제대로 표시되지 않던 문제 수정
- Stack 구조를 Container로 단순화하여 렌더링 최적화
- RenderFlex overflow 오류 해결 (패딩 및 아이콘 크기 조정)
- Android 패키지명 변경 및 빌드 설정 업데이트
This commit is contained in:
JiWoong Sul
2025-07-18 20:39:25 +09:00
parent 58727af659
commit 9f1d29c99d
15 changed files with 109 additions and 105 deletions

View File

@@ -75,66 +75,61 @@ class _FloatingNavigationBarState extends State<FloatingNavigationBar>
offset: Offset(0, 100 * (1 - _animation.value)),
child: Opacity(
opacity: _animation.value,
child: Stack(
children: [
// 흰색 배경 레이어 (완전 불투명)
Container(
decoration: BoxDecoration(
color: AppColors.surfaceColor,
borderRadius: BorderRadius.circular(24),
boxShadow: const [
BoxShadow(
color: AppColors.shadowBlack,
blurRadius: 20,
spreadRadius: -5,
offset: Offset(0, 10),
),
],
child: Container(
margin: const EdgeInsets.all(4), // 그림자 공간 확보
decoration: BoxDecoration(
color: AppColors.surfaceColor,
borderRadius: BorderRadius.circular(24),
boxShadow: const [
BoxShadow(
color: AppColors.shadowBlack,
blurRadius: 12,
spreadRadius: 0,
offset: Offset(0, 4),
),
],
),
child: GlassmorphismCard(
padding:
const EdgeInsets.symmetric(vertical: 8, horizontal: 8),
borderRadius: 24,
blur: 10.0,
backgroundColor: Colors.transparent,
boxShadow: const [], // 그림자는 Container에서 처리
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_NavigationItem(
icon: Icons.home_rounded,
label: AppLocalizations.of(context).home,
isSelected: widget.selectedIndex == 0,
onTap: () => _onItemTapped(0),
),
_NavigationItem(
icon: Icons.analytics_rounded,
label: AppLocalizations.of(context).analysis,
isSelected: widget.selectedIndex == 1,
onTap: () => _onItemTapped(1),
),
_AddButton(
onTap: () => _onItemTapped(2),
),
if (!PlatformHelper.isIOS)
_NavigationItem(
icon: Icons.qr_code_scanner_rounded,
label: AppLocalizations.of(context).smsScanLabel,
isSelected: widget.selectedIndex == 3,
onTap: () => _onItemTapped(3),
),
_NavigationItem(
icon: Icons.settings_rounded,
label: AppLocalizations.of(context).settings,
isSelected: PlatformHelper.isIOS ? widget.selectedIndex == 3 : widget.selectedIndex == 4,
onTap: () => _onItemTapped(PlatformHelper.isIOS ? 3 : 4),
),
],
),
// 글래스모피즘 레이어 (시각적 효과)
GlassmorphismCard(
padding:
const EdgeInsets.symmetric(vertical: 8, horizontal: 8),
borderRadius: 24,
blur: 10.0,
backgroundColor: Colors.transparent,
boxShadow: const [], // 그림자는 배경 레이어에서 처리
child: Row(
mainAxisAlignment: MainAxisAlignment.spaceEvenly,
children: [
_NavigationItem(
icon: Icons.home_rounded,
label: AppLocalizations.of(context).home,
isSelected: widget.selectedIndex == 0,
onTap: () => _onItemTapped(0),
),
_NavigationItem(
icon: Icons.analytics_rounded,
label: AppLocalizations.of(context).analysis,
isSelected: widget.selectedIndex == 1,
onTap: () => _onItemTapped(1),
),
_AddButton(
onTap: () => _onItemTapped(2),
),
if (!PlatformHelper.isIOS)
_NavigationItem(
icon: Icons.qr_code_scanner_rounded,
label: AppLocalizations.of(context).smsScanLabel,
isSelected: widget.selectedIndex == 3,
onTap: () => _onItemTapped(3),
),
_NavigationItem(
icon: Icons.settings_rounded,
label: AppLocalizations.of(context).settings,
isSelected: PlatformHelper.isIOS ? widget.selectedIndex == 3 : widget.selectedIndex == 4,
onTap: () => _onItemTapped(PlatformHelper.isIOS ? 3 : 4),
),
],
),
),
],
),
),
),
),
@@ -169,7 +164,7 @@ class _NavigationItem extends StatelessWidget {
borderRadius: BorderRadius.circular(12),
child: AnimatedContainer(
duration: const Duration(milliseconds: 200),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 12),
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8),
decoration: BoxDecoration(
color: isSelected
? AppColors.primaryColor.withValues(alpha: 0.1)
@@ -184,14 +179,14 @@ class _NavigationItem extends StatelessWidget {
child: Icon(
icon,
color: isSelected ? AppColors.primaryColor : AppColors.navyGray,
size: isSelected ? 26 : 24,
size: isSelected ? 24 : 22,
),
),
const SizedBox(height: 4),
const SizedBox(height: 2),
AnimatedDefaultTextStyle(
duration: const Duration(milliseconds: 200),
style: TextStyle(
fontSize: 11,
fontSize: 10,
fontWeight: isSelected ? FontWeight.w600 : FontWeight.w500,
color: isSelected ? AppColors.primaryColor : AppColors.navyGray,
),