/// États pour le BLoC des membres library membres_state; import 'package:equatable/equatable.dart'; import '../data/models/membre_complete_model.dart'; /// Classe de base pour tous les états des membres abstract class MembresState extends Equatable { const MembresState(); @override List get props => []; } /// État initial class MembresInitial extends MembresState { const MembresInitial(); } /// État de chargement class MembresLoading extends MembresState { const MembresLoading(); } /// État de chargement avec données existantes (pour refresh) class MembresRefreshing extends MembresState { final List currentMembres; const MembresRefreshing(this.currentMembres); @override List get props => [currentMembres]; } /// État de succès avec liste de membres class MembresLoaded extends MembresState { final List membres; final int totalElements; final int currentPage; final int pageSize; final int totalPages; final bool hasMore; const MembresLoaded({ required this.membres, required this.totalElements, this.currentPage = 0, this.pageSize = 20, required this.totalPages, }) : hasMore = currentPage < totalPages - 1; @override List get props => [membres, totalElements, currentPage, pageSize, totalPages, hasMore]; MembresLoaded copyWith({ List? membres, int? totalElements, int? currentPage, int? pageSize, int? totalPages, }) { return MembresLoaded( membres: membres ?? this.membres, totalElements: totalElements ?? this.totalElements, currentPage: currentPage ?? this.currentPage, pageSize: pageSize ?? this.pageSize, totalPages: totalPages ?? this.totalPages, ); } } /// État de succès avec un seul membre class MembreDetailLoaded extends MembresState { final MembreCompletModel membre; const MembreDetailLoaded(this.membre); @override List get props => [membre]; } /// État de succès après création class MembreCreated extends MembresState { final MembreCompletModel membre; const MembreCreated(this.membre); @override List get props => [membre]; } /// État de succès après mise à jour class MembreUpdated extends MembresState { final MembreCompletModel membre; const MembreUpdated(this.membre); @override List get props => [membre]; } /// État de succès après suppression class MembreDeleted extends MembresState { final String id; const MembreDeleted(this.id); @override List get props => [id]; } /// État de succès après activation class MembreActivated extends MembresState { final MembreCompletModel membre; const MembreActivated(this.membre); @override List get props => [membre]; } /// État de succès après désactivation class MembreDeactivated extends MembresState { final MembreCompletModel membre; const MembreDeactivated(this.membre); @override List get props => [membre]; } /// État avec statistiques class MembresStatsLoaded extends MembresState { final Map stats; const MembresStatsLoaded(this.stats); @override List get props => [stats]; } /// État d'erreur class MembresError extends MembresState { final String message; final String? code; final dynamic error; const MembresError({ required this.message, this.code, this.error, }); @override List get props => [message, code, error]; } /// État d'erreur réseau class MembresNetworkError extends MembresError { const MembresNetworkError({ required String message, String? code, dynamic error, }) : super(message: message, code: code, error: error); } /// État d'erreur de validation class MembresValidationError extends MembresError { final Map validationErrors; const MembresValidationError({ required String message, required this.validationErrors, String? code, }) : super(message: message, code: code); @override List get props => [message, code, validationErrors]; }