import 'package:flutter/material.dart'; /// Barre principale du dashboard admin : 2 onglets (Gestion des utilisateurs | Paramètres) + infos utilisateur. class DashboardAppBarAdmin extends StatelessWidget implements PreferredSizeWidget { final int selectedIndex; final ValueChanged onTabChange; const DashboardAppBarAdmin({ Key? key, required this.selectedIndex, required this.onTabChange, }) : super(key: key); @override Size get preferredSize => const Size.fromHeight(kToolbarHeight + 10); @override Widget build(BuildContext context) { return AppBar( elevation: 0, automaticallyImplyLeading: false, title: Row( children: [ const SizedBox(width: 24), Image.asset( 'assets/images/logo.png', height: 40, fit: BoxFit.contain, ), Expanded( child: Center( child: Row( mainAxisSize: MainAxisSize.min, children: [ _buildNavItem(context, 'Gestion des utilisateurs', 0), const SizedBox(width: 24), _buildNavItem(context, 'Paramètres', 1), ], ), ), ), ], ), actions: [ const Padding( padding: EdgeInsets.symmetric(horizontal: 16), child: Center( child: Text( 'Admin', style: TextStyle( color: Colors.black, fontSize: 16, fontWeight: FontWeight.w500, ), ), ), ), Padding( padding: const EdgeInsets.only(right: 16), child: TextButton( onPressed: () => _handleLogout(context), style: TextButton.styleFrom( backgroundColor: const Color(0xFF9CC5C0), foregroundColor: Colors.white, padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(5), ), ), child: const Text('Se déconnecter'), ), ), ], ); } Widget _buildNavItem(BuildContext context, String title, int index) { final bool isActive = index == selectedIndex; return InkWell( onTap: () => onTabChange(index), child: Container( padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 8), decoration: BoxDecoration( color: isActive ? const Color(0xFF9CC5C0) : Colors.transparent, borderRadius: BorderRadius.circular(20), border: isActive ? null : Border.all(color: Colors.black26), ), child: Text( title, style: TextStyle( color: isActive ? Colors.white : Colors.black, fontWeight: isActive ? FontWeight.w600 : FontWeight.normal, fontSize: 14, ), ), ), ); } void _handleLogout(BuildContext context) { showDialog( context: context, builder: (context) => AlertDialog( title: const Text('Déconnexion'), content: const Text('Êtes-vous sûr de vouloir vous déconnecter ?'), actions: [ TextButton( onPressed: () => Navigator.pop(context), child: const Text('Annuler'), ), ElevatedButton( onPressed: () { Navigator.pop(context); // TODO: Implémenter la logique de déconnexion }, child: const Text('Déconnecter'), ), ], ), ); } } /// Sous-barre affichée quand "Gestion des utilisateurs" est actif : 4 onglets sans infos utilisateur. class DashboardUserManagementSubBar extends StatelessWidget { final int selectedSubIndex; final ValueChanged onSubTabChange; const DashboardUserManagementSubBar({ Key? key, required this.selectedSubIndex, required this.onSubTabChange, }) : super(key: key); @override Widget build(BuildContext context) { return Container( height: 48, decoration: BoxDecoration( color: Colors.grey.shade100, border: Border(bottom: BorderSide(color: Colors.grey.shade300)), ), padding: const EdgeInsets.symmetric(horizontal: 24, vertical: 6), child: Center( child: Row( mainAxisSize: MainAxisSize.min, children: [ _buildSubNavItem(context, 'Gestionnaires', 0), const SizedBox(width: 16), _buildSubNavItem(context, 'Parents', 1), const SizedBox(width: 16), _buildSubNavItem(context, 'Assistantes maternelles', 2), const SizedBox(width: 16), _buildSubNavItem(context, 'Administrateurs', 3), ], ), ), ); } Widget _buildSubNavItem(BuildContext context, String title, int index) { final bool isActive = index == selectedSubIndex; return InkWell( onTap: () => onSubTabChange(index), child: Container( padding: const EdgeInsets.symmetric(horizontal: 14, vertical: 6), decoration: BoxDecoration( color: isActive ? const Color(0xFF9CC5C0) : Colors.transparent, borderRadius: BorderRadius.circular(16), border: isActive ? null : Border.all(color: Colors.black26), ), child: Text( title, style: TextStyle( color: isActive ? Colors.white : Colors.black87, fontWeight: isActive ? FontWeight.w600 : FontWeight.normal, fontSize: 13, ), ), ), ); } }