72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
			
		
		
	
	
			72 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Dart
		
	
	
	
	
	
| import 'package:flutter/material.dart';
 | |
| import 'package:provider/provider.dart';
 | |
| import 'package:em2rp/providers/local_user_provider.dart';
 | |
| import 'package:em2rp/utils/colors.dart';
 | |
| 
 | |
| class CustomAppBar extends StatefulWidget implements PreferredSizeWidget {
 | |
|   final String title;
 | |
|   final List<Widget>? actions;
 | |
|   final bool showLogoutButton;
 | |
| 
 | |
|   const CustomAppBar({
 | |
|     super.key,
 | |
|     required this.title,
 | |
|     this.actions,
 | |
|     this.showLogoutButton = true,
 | |
|   });
 | |
| 
 | |
|   @override
 | |
|   State<CustomAppBar> createState() => _CustomAppBarState();
 | |
| 
 | |
|   @override
 | |
|   Size get preferredSize => const Size.fromHeight(kToolbarHeight);
 | |
| }
 | |
| 
 | |
| class _CustomAppBarState extends State<CustomAppBar> {
 | |
|   @override
 | |
|   Widget build(BuildContext context) {
 | |
|     return AppBar(
 | |
|       title: Text(widget.title),
 | |
|       backgroundColor: AppColors.rouge,
 | |
|       actions: [
 | |
|         if (widget.showLogoutButton)
 | |
|           IconButton(
 | |
|             icon: const Icon(Icons.logout, color: AppColors.blanc),
 | |
|             onPressed: () async {
 | |
|               // Afficher une boîte de dialogue de confirmation
 | |
|               final shouldLogout = await showDialog<bool>(
 | |
|                 context: context,
 | |
|                 builder: (context) => AlertDialog(
 | |
|                   title: const Text('Déconnexion'),
 | |
|                   content:
 | |
|                       const Text('Voulez-vous vraiment vous déconnecter ?'),
 | |
|                   actions: [
 | |
|                     TextButton(
 | |
|                       onPressed: () => Navigator.pop(context, false),
 | |
|                       child: const Text('Annuler'),
 | |
|                     ),
 | |
|                     TextButton(
 | |
|                       onPressed: () => Navigator.pop(context, true),
 | |
|                       child: const Text('Déconnexion'),
 | |
|                     ),
 | |
|                   ],
 | |
|                 ),
 | |
|               );
 | |
| 
 | |
|               if (shouldLogout == true && context.mounted) {
 | |
|                 // Déconnexion
 | |
|                 final provider =
 | |
|                     Provider.of<LocalUserProvider>(context, listen: false);
 | |
|                 await provider.signOut();
 | |
|                 if (context.mounted) {
 | |
|                   Navigator.of(context).pushReplacementNamed('/login');
 | |
|                 }
 | |
|               }
 | |
|             },
 | |
|           ),
 | |
|         if (widget.actions != null) ...widget.actions!,
 | |
|       ],
 | |
|     );
 | |
|   }
 | |
| }
 | 
