## 주요 변경사항: ### UI/UX 개선 - shadcn/ui 스타일 기반의 새로운 디자인 시스템 도입 - 모든 주요 화면에 대한 리디자인 구현 완료 - 로그인 화면: 모던한 카드 스타일 적용 - 대시보드: 통계 카드와 차트를 활용한 개요 화면 - 리스트 화면들: 일관된 테이블 디자인과 검색/필터 기능 - 다크모드 지원을 위한 테마 시스템 구축 ### 기능 개선 - Equipment List: 고급 필터링 (상태, 담당자별) - Company List: 검색 및 정렬 기능 강화 - User List: 역할별 필터링 추가 - License List: 만료일 기반 상태 표시 - Warehouse Location: 재고 수준 시각화 ### 기술적 개선 - 재사용 가능한 컴포넌트 라이브러리 구축 - 일관된 코드 패턴 가이드라인 작성 - 프로젝트 구조 분석 및 문서화 ### 문서화 - 프로젝트 분석 문서 추가 - UI 리디자인 진행 상황 문서 - 코드 패턴 가이드 작성 - Equipment 기능 격차 분석 및 구현 계획 ### 삭제/리팩토링 - goods_list.dart 제거 (equipment_list로 통합) - 불필요한 import 및 코드 정리 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
81 lines
2.4 KiB
Dart
81 lines
2.4 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/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.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)),
|
|
],
|
|
),
|
|
);
|
|
}
|
|
}
|