84 lines
2.5 KiB
Dart
84 lines
2.5 KiB
Dart
import 'package:flutter/material.dart';
|
|
import 'package:superport/screens/sidebar/sidebar_screen.dart';
|
|
import 'package:superport/screens/overview/overview_screen.dart';
|
|
import 'package:superport/screens/equipment/equipment_list.dart';
|
|
import 'package:superport/screens/company/company_list.dart';
|
|
import 'package:superport/screens/user/user_list.dart';
|
|
import 'package:superport/screens/license/license_list.dart';
|
|
import 'package:superport/screens/warehouse_location/warehouse_location_list.dart';
|
|
import 'package:superport/screens/goods/goods_list.dart';
|
|
import 'package:superport/utils/constants.dart';
|
|
|
|
/// SPA 스타일의 앱 레이아웃 클래스
|
|
/// 사이드바는 고정되고 내용만 변경되는 구조를 제공
|
|
class AppLayout extends StatefulWidget {
|
|
final String initialRoute;
|
|
|
|
const AppLayout({Key? key, this.initialRoute = Routes.home})
|
|
: super(key: key);
|
|
|
|
@override
|
|
_AppLayoutState createState() => _AppLayoutState();
|
|
}
|
|
|
|
class _AppLayoutState extends State<AppLayout> {
|
|
late String _currentRoute;
|
|
|
|
@override
|
|
void initState() {
|
|
super.initState();
|
|
_currentRoute = widget.initialRoute;
|
|
}
|
|
|
|
/// 현재 경로에 따라 적절한 컨텐츠 섹션을 반환
|
|
Widget _getContentForRoute(String route) {
|
|
switch (route) {
|
|
case Routes.home:
|
|
return const OverviewScreen();
|
|
case Routes.equipment:
|
|
case Routes.equipmentInList:
|
|
case Routes.equipmentOutList:
|
|
case Routes.equipmentRentList:
|
|
// 장비 목록 화면에 현재 라우트 정보를 전달
|
|
return EquipmentListScreen(currentRoute: route);
|
|
case Routes.goods:
|
|
return const GoodsListScreen();
|
|
case Routes.company:
|
|
return const CompanyListScreen();
|
|
case Routes.license:
|
|
return const MaintenanceListScreen();
|
|
case Routes.warehouseLocation:
|
|
return const WarehouseLocationListScreen();
|
|
default:
|
|
return const OverviewScreen();
|
|
}
|
|
}
|
|
|
|
/// 경로 변경 메서드
|
|
void _navigateTo(String route) {
|
|
setState(() {
|
|
_currentRoute = route;
|
|
});
|
|
}
|
|
|
|
@override
|
|
Widget build(BuildContext context) {
|
|
return Scaffold(
|
|
body: Row(
|
|
children: [
|
|
// 왼쪽 사이드바
|
|
SizedBox(
|
|
width: 280,
|
|
child: SidebarMenu(
|
|
currentRoute: _currentRoute,
|
|
onRouteChanged: _navigateTo,
|
|
),
|
|
),
|
|
// 오른쪽 컨텐츠 영역
|
|
Expanded(child: _getContentForRoute(_currentRoute)),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|