118 lines
3.6 KiB
Dart
118 lines
3.6 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:flutter_svg/flutter_svg.dart';
|
|
import 'package:flutter_screenutil/flutter_screenutil.dart'; // Import screenutil
|
|
import 'home_screen.dart';
|
|
import 'daily_care_screen.dart';
|
|
import 'mungnyangz_screen.dart';
|
|
import 'my_info_screen.dart';
|
|
|
|
class MainScreen extends StatefulWidget {
|
|
const MainScreen({super.key});
|
|
|
|
@override
|
|
State<MainScreen> createState() => _MainScreenState();
|
|
}
|
|
|
|
class _MainScreenState extends State<MainScreen> {
|
|
int _selectedIndex = 0;
|
|
|
|
// 탭별 화면 리스트
|
|
final List<Widget> _screens = [
|
|
const HomeScreen(),
|
|
const DailyCareScreen(),
|
|
const MungNyangzScreen(),
|
|
const MyInfoScreen(),
|
|
];
|
|
|
|
void _onItemTapped(int index) {
|
|
setState(() {
|
|
_selectedIndex = index;
|
|
});
|
|
}
|
|
|
|
// SVG 아이콘 빌더 (선택 여부에 따라 색상 변경)
|
|
Widget _buildSvgIcon(String assetName, int index) {
|
|
return SvgPicture.asset(
|
|
assetName,
|
|
width: 24.w,
|
|
height: 24.h,
|
|
colorFilter: ColorFilter.mode(
|
|
_selectedIndex == index ? Colors.black : Colors.grey,
|
|
BlendMode.srcIn,
|
|
),
|
|
);
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: IndexedStack(index: _selectedIndex, children: _screens),
|
|
bottomNavigationBar: Container(
|
|
padding: EdgeInsets.symmetric(vertical: 10.h),
|
|
decoration: const BoxDecoration(
|
|
color: Colors.white,
|
|
border: Border(top: BorderSide(color: Color(0xFFEEEEEE), width: 1.0)),
|
|
),
|
|
child: Theme(
|
|
data: Theme.of(context).copyWith(
|
|
splashColor: Colors.transparent,
|
|
highlightColor: Colors.transparent,
|
|
),
|
|
child: BottomNavigationBar(
|
|
backgroundColor: Colors.white,
|
|
elevation: 0,
|
|
currentIndex: _selectedIndex,
|
|
onTap: _onItemTapped,
|
|
type: BottomNavigationBarType.fixed,
|
|
selectedItemColor: Colors.black,
|
|
unselectedItemColor: Colors.grey,
|
|
selectedLabelStyle: TextStyle(
|
|
fontFamily: 'SCDream',
|
|
fontSize: 14.sp,
|
|
fontWeight: FontWeight.bold,
|
|
color: Colors.black,
|
|
),
|
|
unselectedLabelStyle: TextStyle(
|
|
fontFamily: 'SCDream',
|
|
fontSize: 14.sp,
|
|
fontWeight: FontWeight.w500,
|
|
color: Colors.grey,
|
|
),
|
|
showUnselectedLabels: true,
|
|
items: [
|
|
BottomNavigationBarItem(
|
|
icon: Padding(
|
|
padding: EdgeInsets.only(bottom: 8.h),
|
|
child: _buildSvgIcon('assets/icons/home_icon.svg', 0),
|
|
),
|
|
label: '홈',
|
|
),
|
|
BottomNavigationBarItem(
|
|
icon: Padding(
|
|
padding: EdgeInsets.only(bottom: 8.h),
|
|
child: _buildSvgIcon('assets/icons/calendar_icon.svg', 1),
|
|
),
|
|
label: '데일리케어',
|
|
),
|
|
BottomNavigationBarItem(
|
|
icon: Padding(
|
|
padding: EdgeInsets.only(bottom: 8.h),
|
|
child: _buildSvgIcon('assets/icons/card_icon.svg', 2),
|
|
),
|
|
label: '펫 명함함',
|
|
),
|
|
BottomNavigationBarItem(
|
|
icon: Padding(
|
|
padding: EdgeInsets.only(bottom: 8.h),
|
|
child: _buildSvgIcon('assets/icons/my_icon.svg', 3),
|
|
),
|
|
label: '내 정보',
|
|
),
|
|
],
|
|
),
|
|
),
|
|
),
|
|
);
|
|
}
|
|
}
|