Files
smarthelmet_app/lib/main.dart
KIMGYEONGRAN 260e09b3a5 25.12.04
회원 가입 페이지(Register Screen) UI 구현 , 탈퇴 팝업 UI 개선  및 이미지 수정
2025-12-04 17:53:52 +09:00

126 lines
4.0 KiB
Dart

import 'package:flutter/material.dart';
import 'package:flutter/services.dart';
import 'package:smarthelmet_app/home_screen_content.dart';
import 'package:smarthelmet_app/control_screen.dart';
import 'package:smarthelmet_app/history_screen.dart';
import 'package:smarthelmet_app/rent_return_screen.dart';
import 'package:smarthelmet_app/settings_screen.dart';
import 'package:smarthelmet_app/login_screen.dart';
final Color _mainBlueColor = const Color(0xFF002FA7);
final Color _mainTextColor = const Color(0xFF1C1C1E);
final Color _subTextColor = const Color(0xFF6A717B);
final Color _pageBackgroundColor = const Color(0xFFF5F7F9);
final Color _cardBackgroundColor = Colors.white;
void main() {
runApp(const SmartHelmetApp());
}
class SmartHelmetApp extends StatelessWidget {
const SmartHelmetApp({super.key});
@override
Widget build(BuildContext context) {
SystemChrome.setSystemUIOverlayStyle(const SystemUiOverlayStyle(
statusBarColor: Colors.transparent,
statusBarIconBrightness: Brightness.dark,
));
return MaterialApp(
debugShowCheckedModeBanner: false,
theme: ThemeData(
brightness: Brightness.light,
scaffoldBackgroundColor: _pageBackgroundColor,
primaryColor: _mainBlueColor,
fontFamily: 'Pretendard',
textTheme: TextTheme(
bodyLarge: TextStyle(color: _mainTextColor, fontWeight: FontWeight.w500),
bodyMedium: TextStyle(color: _subTextColor, fontWeight: FontWeight.w400),
),
),
home: const LoginScreen(),
);
}
}
class HomeScreen extends StatefulWidget {
const HomeScreen({super.key});
@override
State<HomeScreen> createState() => _HomeScreenState();
}
class _HomeScreenState extends State<HomeScreen> {
int _selectedIndex = 0;
final List<Widget> _screens = [
const HomeScreenContent(),
const HistoryScreen(),
const ControlScreen(),
const RentReturnScreen(),
const SettingsScreen(),
];
@override
Widget build(BuildContext context) {
return MediaQuery(
data: MediaQuery.of(context).copyWith(
textScaler: const TextScaler.linear(1.0),
),
child: Scaffold(
body: SafeArea(
bottom: false,
child: Column(
children: [
Expanded(
child: _screens[_selectedIndex],
),
],
),
),
bottomNavigationBar: BottomNavigationBar(
currentIndex: _selectedIndex,
onTap: (index) {
setState(() {
_selectedIndex = index;
});
},
type: BottomNavigationBarType.fixed,
backgroundColor: _mainBlueColor,
elevation: 0,
selectedItemColor: Colors.white,
unselectedItemColor: Colors.white70,
showUnselectedLabels: true,
selectedFontSize: 12,
unselectedFontSize: 12,
selectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold, height: 1.5),
unselectedLabelStyle: const TextStyle(fontWeight: FontWeight.bold, height: 1.5),
iconSize: 22,
items: const [
BottomNavigationBarItem(
icon: Padding(padding: EdgeInsets.only(bottom: 2.0), child: Icon(Icons.home)),
label: '',
),
BottomNavigationBarItem(
icon: Padding(padding: EdgeInsets.only(bottom: 2.0), child: Icon(Icons.history)),
label: '기록',
),
BottomNavigationBarItem(
icon: Padding(padding: EdgeInsets.only(bottom: 2.0), child: Icon(Icons.settings_input_component)),
label: '제어',
),
BottomNavigationBarItem(
icon: Padding(padding: EdgeInsets.only(bottom: 2.0), child: Icon(Icons.assignment_return_outlined)),
label: '대여 / 반납',
),
BottomNavigationBarItem(
icon: Padding(padding: EdgeInsets.only(bottom: 2.0), child: Icon(Icons.settings)),
label: '설정',
),
],
),
),
);
}
}