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'; import 'membre_edit_page.dart'; // Import de l'architecture unifiée pour amélioration progressive import '../../../../shared/widgets/common/unified_page_layout.dart'; // Imports des optimisations de performance import '../../../../core/performance/performance_optimizer.dart'; import '../../../../shared/widgets/performance/optimized_list_view.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: BlocBuilder( builder: (context, state) { // Utilisation de UnifiedPageLayout pour améliorer la cohérence // tout en conservant TOUS les widgets spécialisés existants return UnifiedPageLayout( title: 'Dashboard Membres', icon: Icons.people, actions: [ IconButton( icon: const Icon(Icons.refresh), onPressed: _loadData, tooltip: 'Actualiser', ), ], isLoading: state is MembresLoading, errorMessage: state is MembresError ? state.message : null, onRefresh: _loadData, floatingActionButton: FloatingActionButton( onPressed: _loadData, backgroundColor: AppTheme.primaryColor, tooltip: 'Actualiser les données', child: const Icon(Icons.refresh, color: Colors.white), ), body: _buildDashboard(), ); }, ), ); } 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) async { final result = await Navigator.of(context).push( MaterialPageRoute( builder: (context) => MembreEditPage(membre: member), ), ); if (result == true) { // Recharger les données si le membre a été modifié _membresBloc.add(const LoadMembres()); } }, 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'), ); } }, ), ], ), ); } }