import 'package:flutter/material.dart'; import 'package:geosector_app/presentation/widgets/dashboard_app_bar.dart'; import 'package:geosector_app/presentation/widgets/responsive_navigation.dart'; import 'package:geosector_app/core/theme/app_theme.dart'; // Pour les couleurs du thème /// Layout commun pour les tableaux de bord utilisateur et administrateur /// Combine DashboardAppBar et ResponsiveNavigation class DashboardLayout extends StatelessWidget { /// Le contenu principal à afficher final Widget body; /// Le titre de la page final String title; /// L'index de la page sélectionnée final int selectedIndex; /// Callback appelé lorsqu'un élément de navigation est sélectionné final Function(int) onDestinationSelected; /// Liste des destinations de navigation final List destinations; /// Actions supplémentaires à afficher dans l'AppBar final List? additionalActions; /// Widgets à afficher en bas de la sidebar final List? sidebarBottomItems; /// Indique si l'utilisateur est un administrateur final bool isAdmin; /// Callback appelé lorsque le bouton de déconnexion est pressé final VoidCallback? onLogoutPressed; const DashboardLayout({ super.key, required this.body, required this.title, required this.selectedIndex, required this.onDestinationSelected, required this.destinations, this.additionalActions, this.sidebarBottomItems, this.isAdmin = false, this.onLogoutPressed, }); @override Widget build(BuildContext context) { // Scaffold avec fond transparent (le fond est géré par AppScaffold) return Scaffold( key: ValueKey('dashboard_scaffold_$selectedIndex'), backgroundColor: Colors.transparent, appBar: DashboardAppBar( key: ValueKey('dashboard_appbar_$selectedIndex'), title: title, pageTitle: destinations[selectedIndex].label, isAdmin: isAdmin, onLogoutPressed: onLogoutPressed, ), body: ResponsiveNavigation( key: ValueKey('responsive_nav_$selectedIndex'), title: title, body: body, selectedIndex: selectedIndex, onDestinationSelected: onDestinationSelected, destinations: destinations, showNewPassageButton: false, onNewPassagePressed: null, sidebarBottomItems: sidebarBottomItems, isAdmin: isAdmin, showAppBar: false, ), ); } }