import 'package:flutter/material.dart'; import '../../../core/constants/colors.dart'; class ProfileScreen extends StatelessWidget { const ProfileScreen({super.key}); @override Widget build(BuildContext context) { print("Affichage de l'écran de profil."); return Scaffold( backgroundColor: AppColors.backgroundColor, body: CustomScrollView( slivers: [ SliverAppBar( expandedHeight: 200.0, floating: false, pinned: true, backgroundColor: AppColors.darkPrimary, flexibleSpace: FlexibleSpaceBar( title: Text( 'Profil', style: TextStyle( color: AppColors.accentColor, fontSize: 20.0, fontWeight: FontWeight.bold, ), ), background: Image.asset( 'lib/assets/images/profile_picture.png', fit: BoxFit.cover, ), ), actions: [ IconButton( icon: const Icon(Icons.settings, color: Colors.white), onPressed: () { print("Bouton des paramètres cliqué."); // Logique de navigation vers les paramètres }, ), ], ), SliverList( delegate: SliverChildListDelegate( [ const SizedBox(height: 10), _buildUserInfoCard(), const SizedBox(height: 10), _buildEditOptionsCard(), const SizedBox(height: 10), _buildStatisticsSectionCard(), const SizedBox(height: 10), _buildExpandableSectionCard( title: 'Historique', icon: Icons.history, children: [ _buildAnimatedListTile( icon: Icons.event_note, label: 'Historique des Événements', onTap: () { print("Accès à l'historique des événements."); // Logique de navigation vers l'historique des événements }, ), _buildAnimatedListTile( icon: Icons.history, label: 'Historique des Publications', onTap: () { print("Accès à l'historique des publications."); // Logique de navigation vers l'historique des publications }, ), _buildAnimatedListTile( icon: Icons.bookmark, label: 'Historique de Réservations', onTap: () { print("Accès à l'historique des réservations."); // Logique de navigation vers l'historique des réservations }, ), ], ), const SizedBox(height: 10), _buildExpandableSectionCard( title: 'Préférences et Paramètres', icon: Icons.settings, children: [ _buildAnimatedListTile( icon: Icons.privacy_tip, label: 'Paramètres de confidentialité', onTap: () { print("Accès aux paramètres de confidentialité."); // Logique de navigation vers les paramètres de confidentialité }, ), _buildAnimatedListTile( icon: Icons.notifications, label: 'Notifications', onTap: () { print("Accès aux paramètres de notifications."); // Logique de navigation vers les notifications }, ), _buildAnimatedListTile( icon: Icons.language, label: 'Langue de l\'application', onTap: () { print("Accès aux paramètres de langue."); // Logique de navigation vers les paramètres de langue }, ), _buildAnimatedListTile( icon: Icons.format_paint, label: 'Thème de l\'application', onTap: () { print("Accès aux paramètres de thème."); // Logique de navigation vers les paramètres de thème }, ), ], ), const SizedBox(height: 10), _buildSupportSectionCard(), const SizedBox(height: 10), _buildAccountDeletionCard(context), ], ), ), ], ), ); } Widget _buildUserInfoCard() { return Card( color: AppColors.cardColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), elevation: 2, child: Padding( padding: const EdgeInsets.all(16.0), child: Column( children: [ CircleAvatar( radius: 50, backgroundImage: AssetImage('lib/assets/images/profile_picture.png'), backgroundColor: Colors.transparent, ), const SizedBox(height: 10), const Text( 'GBANE Dahoud', style: TextStyle( fontSize: 24, fontWeight: FontWeight.bold, color: Colors.white, letterSpacing: 1.2, ), ), const SizedBox(height: 5), Text( 'pseudo', style: TextStyle( fontSize: 16, color: Colors.grey[400], fontStyle: FontStyle.italic, ), ), const SizedBox(height: 5), Text( 'gbanedahoud@lions.dev', style: TextStyle( fontSize: 14, color: Colors.grey[600], decoration: TextDecoration.underline, ), ), ], ), ), ); } Widget _buildEditOptionsCard() { return Card( color: AppColors.cardColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), elevation: 2, child: Column( children: [ _buildAnimatedListTile( icon: Icons.edit, label: 'Éditer le profil', onTap: () { print("Édition du profil."); // Logique de navigation vers l'édition du profil }, ), _buildAnimatedListTile( icon: Icons.camera_alt, label: 'Changer la photo de profil', onTap: () { print("Changement de la photo de profil."); // Logique de changement de la photo de profil }, ), _buildAnimatedListTile( icon: Icons.lock, label: 'Changer le mot de passe', onTap: () { print("Changement du mot de passe."); // Logique de changement de mot de passe }, ), ], ), ); } Widget _buildStatisticsSectionCard() { return Card( color: AppColors.cardColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), elevation: 2, child: Padding( padding: const EdgeInsets.all(16.0), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ const Text( 'Statistiques Personnelles', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.white, ), ), const SizedBox(height: 10), _buildStatTile( icon: Icons.event, label: 'Événements Participés', value: '12', ), _buildStatTile( icon: Icons.place, label: 'Établissements Visités', value: '8', ), _buildStatTile( icon: Icons.post_add, label: 'Publications', value: '24', ), _buildStatTile( icon: Icons.group, label: 'Amis/Followers', value: '150', ), ], ), ), ); } Widget _buildExpandableSectionCard({ required String title, required IconData icon, required List children, }) { return Card( color: AppColors.cardColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), elevation: 2, child: ExpansionTile( title: Text( title, style: const TextStyle( fontSize: 18, fontWeight: FontWeight.bold, color: Colors.white, ), ), leading: Icon(icon, color: AppColors.accentColor), iconColor: AppColors.accentColor, collapsedIconColor: AppColors.accentColor, children: children, ), ); } Widget _buildSupportSectionCard() { return Card( color: AppColors.cardColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), elevation: 2, child: Column( children: [ const Padding( padding: EdgeInsets.all(16.0), child: Text( 'Support et Assistance', style: TextStyle( fontSize: 20, fontWeight: FontWeight.bold, color: Colors.white, ), ), ), _buildAnimatedListTile( icon: Icons.help, label: 'Support et Assistance', onTap: () { print("Accès au Support et Assistance."); // Logique de navigation vers le support }, ), _buildAnimatedListTile( icon: Icons.article, label: 'Conditions d\'utilisation', onTap: () { print("Accès aux conditions d'utilisation."); // Logique de navigation vers les conditions d'utilisation }, ), _buildAnimatedListTile( icon: Icons.privacy_tip, label: 'Politique de confidentialité', onTap: () { print("Accès à la politique de confidentialité."); // Logique de navigation vers la politique de confidentialité }, ), ], ), ); } Widget _buildAccountDeletionCard(BuildContext context) { return Card( color: AppColors.cardColor, shape: RoundedRectangleBorder(borderRadius: BorderRadius.circular(10)), elevation: 2, child: ListTile( leading: const Icon(Icons.delete, color: Colors.redAccent), title: const Text( 'Supprimer le compte', style: TextStyle(color: Colors.redAccent, fontWeight: FontWeight.bold), ), onTap: () { _showDeleteConfirmationDialog(context); }, ), ); } void _showDeleteConfirmationDialog(BuildContext context) { showDialog( context: context, builder: (BuildContext context) { return AlertDialog( backgroundColor: AppColors.backgroundColor, title: const Text( 'Confirmer la suppression', style: TextStyle(color: Colors.white), ), content: const Text( 'Êtes-vous sûr de vouloir supprimer votre compte ? Cette action est irréversible.', style: TextStyle(color: Colors.white70), ), actions: [ TextButton( onPressed: () { Navigator.of(context).pop(); }, child: Text( 'Annuler', style: TextStyle(color: AppColors.accentColor), ), ), TextButton( onPressed: () { print("Suppression du compte confirmée."); Navigator.of(context).pop(); }, child: const Text( 'Supprimer', style: TextStyle(color: Colors.redAccent), ), ), ], ); }, ); } Widget _buildAnimatedListTile({ required IconData icon, required String label, required VoidCallback onTap, }) { return InkWell( onTap: onTap, borderRadius: BorderRadius.circular(10), splashColor: Colors.blueAccent.withOpacity(0.2), child: ListTile( leading: Icon(icon, color: AppColors.accentColor), title: Text( label, style: const TextStyle(color: Colors.white, fontWeight: FontWeight.w600), ), ), ); } Widget _buildStatTile({ required IconData icon, required String label, required String value, }) { return ListTile( leading: Icon(icon, color: AppColors.accentColor), title: Text(label, style: const TextStyle(color: Colors.white)), trailing: Text( value, style: const TextStyle( color: Colors.white, fontWeight: FontWeight.bold, fontSize: 16, ), ), ); } }