import 'package:flutter/material.dart'; import 'package:flutter_bloc/flutter_bloc.dart'; import '../../../../core/di/injection.dart'; import '../../../../shared/theme/app_theme.dart'; import '../bloc/membres_bloc.dart'; import '../bloc/membres_event.dart'; import '../bloc/membres_state.dart'; import '../widgets/dashboard/welcome_section_widget.dart'; import '../widgets/dashboard/members_kpi_section_widget.dart'; import '../widgets/dashboard/members_quick_actions_widget.dart'; import '../widgets/dashboard/members_analytics_widget.dart'; import '../widgets/dashboard/members_enhanced_list_widget.dart'; import '../widgets/dashboard/members_recent_activities_widget.dart'; import '../widgets/dashboard/members_advanced_filters_widget.dart'; import '../widgets/dashboard/members_smart_search_widget.dart'; import '../widgets/dashboard/members_notifications_widget.dart'; class MembresDashboardPage extends StatefulWidget { const MembresDashboardPage({super.key}); @override State createState() => _MembresDashboardPageState(); } class _MembresDashboardPageState extends State { late MembresBloc _membresBloc; Map _currentFilters = {}; String _currentSearchQuery = ''; @override void initState() { super.initState(); _membresBloc = getIt(); _loadData(); } void _loadData() { _membresBloc.add(const LoadMembres()); } void _onFiltersChanged(Map filters) { setState(() { _currentFilters = filters; }); // TODO: Appliquer les filtres aux données _loadData(); } void _onSearchChanged(String query) { setState(() { _currentSearchQuery = query; }); // TODO: Appliquer la recherche if (query.isNotEmpty) { _membresBloc.add(SearchMembres(query)); } else { _loadData(); } } void _onSuggestionSelected(Map suggestion) { switch (suggestion['type']) { case 'quick_filter': _onFiltersChanged(suggestion['filter']); break; case 'member': // TODO: Naviguer vers les détails du membre break; } } @override Widget build(BuildContext context) { return BlocProvider.value( value: _membresBloc, child: Scaffold( backgroundColor: AppTheme.backgroundLight, appBar: AppBar( title: const Text( 'Dashboard Membres', style: TextStyle( fontWeight: FontWeight.w600, fontSize: 20, ), ), backgroundColor: AppTheme.primaryColor, foregroundColor: Colors.white, elevation: 0, actions: [ IconButton( icon: const Icon(Icons.refresh), onPressed: _loadData, tooltip: 'Actualiser', ), ], ), body: BlocBuilder( builder: (context, state) { if (state is MembresLoading) { return const Center( child: CircularProgressIndicator(), ); } if (state is MembresError) { return Center( child: Column( mainAxisAlignment: MainAxisAlignment.center, children: [ Icon( Icons.error_outline, size: 64, color: AppTheme.errorColor, ), const SizedBox(height: 16), Text( 'Erreur de chargement', style: TextStyle( fontSize: 18, fontWeight: FontWeight.w600, color: AppTheme.textPrimary, ), ), const SizedBox(height: 8), Text( state.message, style: TextStyle( fontSize: 14, color: AppTheme.textSecondary, ), textAlign: TextAlign.center, ), const SizedBox(height: 24), ElevatedButton.icon( onPressed: _loadData, icon: const Icon(Icons.refresh), label: const Text('Réessayer'), style: ElevatedButton.styleFrom( backgroundColor: AppTheme.primaryColor, foregroundColor: Colors.white, ), ), ], ), ); } return _buildDashboard(); }, ), floatingActionButton: FloatingActionButton( onPressed: _loadData, backgroundColor: AppTheme.primaryColor, tooltip: 'Actualiser les données', child: const Icon(Icons.refresh, color: Colors.white), ), ), ); } Widget _buildDashboard() { return SingleChildScrollView( padding: const EdgeInsets.all(16), child: Column( crossAxisAlignment: CrossAxisAlignment.start, children: [ // Section d'accueil const MembersWelcomeSectionWidget(), const SizedBox(height: 24), // Notifications en temps réel const MembersNotificationsWidget(), // Recherche intelligente MembersSmartSearchWidget( onSearch: _onSearchChanged, onSuggestionSelected: _onSuggestionSelected, recentSearches: const [], // TODO: Implémenter l'historique ), const SizedBox(height: 16), // Filtres avancés MembersAdvancedFiltersWidget( onFiltersChanged: _onFiltersChanged, initialFilters: _currentFilters, ), // KPI Cards const MembersKPISectionWidget(), const SizedBox(height: 24), // Actions rapides const MembersQuickActionsWidget(), const SizedBox(height: 24), // Graphiques et analyses const MembersAnalyticsWidget(), const SizedBox(height: 24), // Activités récentes const MembersRecentActivitiesWidget(), const SizedBox(height: 24), // Liste des membres améliorée BlocBuilder( builder: (context, state) { if (state is MembresLoaded) { return MembersEnhancedListWidget( members: state.membres, onMemberTap: (member) { // TODO: Naviguer vers les détails du membre ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Détails de ${member.nomComplet}'), backgroundColor: AppTheme.primaryColor, ), ); }, onMemberCall: (member) { // TODO: Appeler le membre ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Appel de ${member.nomComplet}'), backgroundColor: AppTheme.successColor, ), ); }, onMemberMessage: (member) { // TODO: Envoyer un message ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Message à ${member.nomComplet}'), backgroundColor: AppTheme.infoColor, ), ); }, onMemberEdit: (member) { // TODO: Modifier le membre ScaffoldMessenger.of(context).showSnackBar( SnackBar( content: Text('Modification de ${member.nomComplet}'), backgroundColor: AppTheme.warningColor, ), ); }, searchQuery: _currentSearchQuery, filters: _currentFilters, ); } else if (state is MembresLoading) { return MembersEnhancedListWidget( members: const [], onMemberTap: (member) {}, isLoading: true, searchQuery: '', filters: const {}, ); } else { return const Center( child: Text('Erreur lors du chargement des membres'), ); } }, ), ], ), ); } }