import 'package:flutter/material.dart'; import '../widgets/bottom_navigation.dart'; class MainLayout extends StatefulWidget { final Widget child; final int currentIndex; const MainLayout({super.key, required this.child, this.currentIndex = 0}); @override // ignore: library_private_types_in_public_api _MainLayoutState createState() => _MainLayoutState(); } class _MainLayoutState extends State { int _selectedIndex = 0; @override void initState() { super.initState(); _selectedIndex = widget.currentIndex; } @override Widget build(BuildContext context) { final isDesktop = MediaQuery.of(context).size.width >= 768; return Scaffold( backgroundColor: Colors.grey.shade50, body: Row( children: [ // Desktop Sidebar if (isDesktop) _buildDesktopSidebar(), // Main Content Expanded( child: Column( children: [ // Page Content Expanded(child: widget.child), // Bottom Navigation AppBottomNavigation( selectedIndex: _selectedIndex, onItemTapped: _onItemTapped, isDesktop: isDesktop, ), ], ), ), ], ), ); } void _onItemTapped(int index) { setState(() { _selectedIndex = index; }); // Global navigation logic switch (index) { case 0: Navigator.pushReplacementNamed(context, '/tables'); break; case 1: Navigator.pushReplacementNamed(context, '/commandes'); break; case 2: Navigator.pushReplacementNamed(context, '/categories'); break; case 3: Navigator.pushReplacementNamed(context, '/menus'); break; } } Widget _buildDesktopSidebar() { return Container( width: 250, color: Colors.white, child: Column( children: [ Container( padding: const EdgeInsets.all(20), child: const Text( 'Restaurant App', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.black87, ), ), ), Expanded( child: ListView( children: [ _buildSidebarItem( icon: Icons.table_restaurant, title: 'Tables', route: '/tables', index: 0, ), _buildSidebarItem( icon: Icons.receipt_long_outlined, title: 'Commandes', route: '/commandes', index: 1, ), _buildSidebarItem( icon: Icons.category_outlined, title: 'Catégories', route: '/categories', index: 2, ), _buildSidebarItem( icon: Icons.restaurant_menu, title: 'Menus', route: '/menus', index: 3, ), ], ), ), ], ), ); } Widget _buildSidebarItem({ required IconData icon, required String title, required String route, required int index, }) { final isSelected = _selectedIndex == index; return ListTile( leading: Icon( icon, color: isSelected ? Colors.green.shade700 : Colors.grey.shade600, ), title: Text( title, style: TextStyle( color: isSelected ? Colors.green.shade700 : Colors.grey.shade700, fontWeight: isSelected ? FontWeight.w600 : FontWeight.normal, ), ), selected: isSelected, selectedTileColor: Colors.green.shade50, onTap: () { setState(() { _selectedIndex = index; }); Navigator.pushReplacementNamed(context, route); }, ); } }