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 { 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)), ], ), ); } }