import 'package:flutter/material.dart'; import '../../../../shared/theme/app_theme.dart'; /// Pied de page de la connexion avec informations et liens class LoginFooter extends StatelessWidget { const LoginFooter({super.key}); @override Widget build(BuildContext context) { return Column( children: [ // Séparateur _buildDivider(), const SizedBox(height: 24), // Informations sur l'application _buildAppInfo(), const SizedBox(height: 20), // Liens utiles _buildUsefulLinks(context), const SizedBox(height: 20), // Version et copyright _buildVersionInfo(), ], ); } Widget _buildDivider() { return Row( children: [ Expanded( child: Container( height: 1, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [ Colors.transparent, AppTheme.textSecondary.withOpacity(0.3), Colors.transparent, ], ), ), ), ), Padding( padding: const EdgeInsets.symmetric(horizontal: 16), child: Icon( Icons.star, size: 16, color: AppTheme.textSecondary.withOpacity(0.5), ), ), Expanded( child: Container( height: 1, decoration: BoxDecoration( gradient: LinearGradient( begin: Alignment.centerLeft, end: Alignment.centerRight, colors: [ Colors.transparent, AppTheme.textSecondary.withOpacity(0.3), Colors.transparent, ], ), ), ), ), ], ); } Widget _buildAppInfo() { return Container( padding: const EdgeInsets.all(16), decoration: BoxDecoration( color: AppTheme.backgroundLight, borderRadius: BorderRadius.circular(12), border: Border.all( color: AppTheme.textSecondary.withOpacity(0.1), ), ), child: Column( children: [ Row( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.security, size: 20, color: AppTheme.successColor, ), const SizedBox(width: 8), Text( 'Connexion sécurisée', style: TextStyle( fontSize: 14, color: AppTheme.successColor, fontWeight: FontWeight.w600, ), ), ], ), const SizedBox(height: 8), Text( 'Vos données sont protégées par un cryptage de niveau bancaire', textAlign: TextAlign.center, style: TextStyle( fontSize: 12, color: AppTheme.textSecondary, ), ), ], ), ); } Widget _buildUsefulLinks(BuildContext context) { return Wrap( spacing: 20, runSpacing: 12, alignment: WrapAlignment.center, children: [ _buildLinkButton( icon: Icons.help_outline, label: 'Aide', onTap: () => _showHelpDialog(context), ), _buildLinkButton( icon: Icons.info_outline, label: 'À propos', onTap: () => _showAboutDialog(context), ), _buildLinkButton( icon: Icons.privacy_tip_outlined, label: 'Confidentialité', onTap: () => _showPrivacyDialog(context), ), ], ); } Widget _buildLinkButton({ required IconData icon, required String label, required VoidCallback onTap, }) { return GestureDetector( onTap: onTap, child: Container( padding: const EdgeInsets.symmetric(horizontal: 12, vertical: 8), decoration: BoxDecoration( color: Colors.transparent, borderRadius: BorderRadius.circular(8), border: Border.all( color: AppTheme.textSecondary.withOpacity(0.2), ), ), child: Row( mainAxisSize: MainAxisSize.min, children: [ Icon( icon, size: 16, color: AppTheme.textSecondary, ), const SizedBox(width: 6), Text( label, style: TextStyle( fontSize: 12, color: AppTheme.textSecondary, fontWeight: FontWeight.w500, ), ), ], ), ), ); } Widget _buildVersionInfo() { return Column( children: [ Text( 'UnionFlow Mobile v1.0.0', style: TextStyle( fontSize: 12, color: AppTheme.textSecondary.withOpacity(0.7), fontWeight: FontWeight.w500, ), ), const SizedBox(height: 4), Text( '© 2025 Lions Dev Team. Tous droits réservés.', style: TextStyle( fontSize: 10, color: AppTheme.textSecondary.withOpacity(0.5), ), ), ], ); } void _showHelpDialog(BuildContext context) { showDialog( context: context, builder: (context) => AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), title: Row( children: [ Icon( Icons.help_outline, color: AppTheme.infoColor, ), const SizedBox(width: 12), const Text('Aide'), ], ), content: Column( mainAxisSize: MainAxisSize.min, crossAxisAlignment: CrossAxisAlignment.start, children: [ _buildHelpItem( 'Connexion', 'Utilisez votre email et mot de passe fournis par votre association.', ), const SizedBox(height: 12), _buildHelpItem( 'Mot de passe oublié', 'Contactez votre administrateur pour réinitialiser votre mot de passe.', ), const SizedBox(height: 12), _buildHelpItem( 'Problèmes techniques', 'Vérifiez votre connexion internet et réessayez.', ), ], ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: Text( 'Fermer', style: TextStyle( color: AppTheme.primaryColor, fontWeight: FontWeight.w600, ), ), ), ], ), ); } void _showAboutDialog(BuildContext context) { showDialog( context: context, builder: (context) => AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), title: Row( children: [ Icon( Icons.info_outline, color: AppTheme.primaryColor, ), const SizedBox(width: 12), const Text('À propos'), ], ), content: const Text( 'UnionFlow est une solution complète de gestion d\'associations développée par Lions Dev Team.\n\n' 'Cette application mobile vous permet de gérer vos membres, cotisations, événements et bien plus encore, où que vous soyez.', ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: Text( 'Fermer', style: TextStyle( color: AppTheme.primaryColor, fontWeight: FontWeight.w600, ), ), ), ], ), ); } void _showPrivacyDialog(BuildContext context) { showDialog( context: context, builder: (context) => AlertDialog( shape: RoundedRectangleBorder( borderRadius: BorderRadius.circular(16), ), title: Row( children: [ Icon( Icons.privacy_tip_outlined, color: AppTheme.warningColor, ), const SizedBox(width: 12), const Text('Confidentialité'), ], ), content: const Text( 'Nous respectons votre vie privée. Toutes vos données sont stockées de manière sécurisée et ne sont jamais partagées avec des tiers.\n\n' 'Les données sont chiffrées en transit et au repos selon les standards de sécurité les plus élevés.', ), actions: [ TextButton( onPressed: () => Navigator.of(context).pop(), child: Text( 'Compris', style: TextStyle( color: AppTheme.primaryColor, fontWeight: FontWeight.w600, ), ), ), ], ), ); } Widget _buildHelpItem(String title, String description) { return Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ Text( title, style: TextStyle( fontSize: 14, fontWeight: FontWeight.w600, color: AppTheme.textPrimary, ), ), const SizedBox(height: 4), Text( description, style: TextStyle( fontSize: 12, color: AppTheme.textSecondary, ), ), ], ); } }