import 'package:flutter/material.dart'; import 'package:smartgarden_chat/widgets/sidebar.dart'; import 'package:smartgarden_chat/widgets/header.dart'; import 'package:smartgarden_chat/widgets/main_dashboard.dart'; import 'package:smartgarden_chat/widgets/temp_data_page.dart'; import 'package:smartgarden_chat/widgets/humid_data_page.dart'; import 'package:smartgarden_chat/widgets/co2_data_page.dart'; import 'package:smartgarden_chat/widgets/tvoc_data_page.dart'; import 'package:smartgarden_chat/widgets/dust_data_page.dart'; import 'package:smartgarden_chat/widgets/device_manage_page.dart'; import 'package:smartgarden_chat/widgets/chatbot_detail_page.dart'; void main() => runApp(const SmartGardenApp()); class SmartGardenApp extends StatelessWidget { const SmartGardenApp({super.key}); @override Widget build(BuildContext context) { return MaterialApp( debugShowCheckedModeBanner: false, theme: ThemeData.dark().copyWith(scaffoldBackgroundColor: const Color(0xFF0F1115)), home: const MainDashboardScreen(), ); } } class MainDashboardScreen extends StatefulWidget { const MainDashboardScreen({super.key}); @override State createState() => _MainDashboardScreenState(); } class _MainDashboardScreenState extends State { // ✨ 초기값을 false로 설정하여 앱 시작 시 사이드바가 숨겨진 상태로 만듭니다. bool isSidebarOpen = false; String selectedPage = '스마트가든 챗봇'; bool isChatbotDetail = false; @override Widget build(BuildContext context) { return Scaffold( body: Row( children: [ AnimatedContainer( duration: const Duration(milliseconds: 250), curve: Curves.easeInOut, width: isSidebarOpen ? 260 : 0, child: Sidebar( isSidebarOpen: isSidebarOpen, selectedPage: selectedPage, onPageChanged: (page) { setState(() { selectedPage = page; isChatbotDetail = false; // 다른 메뉴 클릭 시 상세 뷰 초기화 }); }, ), ), Expanded( child: Column( children: [ Header( title: isChatbotDetail ? '$selectedPage - 상세' : selectedPage, isSidebarOpen: isSidebarOpen, onToggleSidebar: () => setState(() => isSidebarOpen = !isSidebarOpen), ), Expanded( child: Container( padding: const EdgeInsets.all(24.0), color: const Color(0xFF13161A), child: _buildBody(), // ✨ 개인 위젯 호출 통로 ), ), ], ), ), ], ), ); } // ✨ 질문자님이 정의하신 아코디언 메뉴명과 개인 위젯 매핑 분기점 Widget _buildBody() { switch (selectedPage) { case '스마트가든 챗봇': return isChatbotDetail ? ChatbotDetailPage(onBack: () => setState(() => isChatbotDetail = false)) : DashboardGrid(onCharacterTap: () => setState(() => isChatbotDetail = true)); case '온도 데이터': return const TempDataPage(); case '습도 데이터': return const HumidDataPage(); case '이산화탄소 데이터': return const Co2DataPage(); case 'TVOC 데이터': return const TvocDataPage(); case '미세먼지 데이터': return const DustDataPage(); case '장비 관리': return const DeviceManagePage(); default: return isChatbotDetail ? ChatbotDetailPage(onBack: () => setState(() => isChatbotDetail = false)) : DashboardGrid(onCharacterTap: () => setState(() => isChatbotDetail = true)); } } }