/// États pour le BLoC des événements library evenements_state; import 'package:equatable/equatable.dart'; import '../data/models/evenement_model.dart'; /// Classe de base pour tous les états abstract class EvenementsState extends Equatable { const EvenementsState(); @override List get props => []; } /// État initial class EvenementsInitial extends EvenementsState { const EvenementsInitial(); } /// État de chargement class EvenementsLoading extends EvenementsState { const EvenementsLoading(); } /// État de chargement avec données existantes (pour refresh) class EvenementsRefreshing extends EvenementsState { final List currentEvenements; const EvenementsRefreshing(this.currentEvenements); @override List get props => [currentEvenements]; } /// État de succès avec liste d'événements class EvenementsLoaded extends EvenementsState { final List evenements; final int total; final int page; final int size; final int totalPages; final bool hasMore; const EvenementsLoaded({ required this.evenements, required this.total, this.page = 0, this.size = 20, required this.totalPages, }) : hasMore = page < totalPages - 1; @override List get props => [evenements, total, page, size, totalPages, hasMore]; EvenementsLoaded copyWith({ List? evenements, int? total, int? page, int? size, int? totalPages, }) { return EvenementsLoaded( evenements: evenements ?? this.evenements, total: total ?? this.total, page: page ?? this.page, size: size ?? this.size, totalPages: totalPages ?? this.totalPages, ); } } /// État de succès avec un seul événement class EvenementDetailLoaded extends EvenementsState { final EvenementModel evenement; const EvenementDetailLoaded(this.evenement); @override List get props => [evenement]; } /// État de succès après création class EvenementCreated extends EvenementsState { final EvenementModel evenement; const EvenementCreated(this.evenement); @override List get props => [evenement]; } /// État de succès après mise à jour class EvenementUpdated extends EvenementsState { final EvenementModel evenement; const EvenementUpdated(this.evenement); @override List get props => [evenement]; } /// État de succès après suppression class EvenementDeleted extends EvenementsState { final String id; const EvenementDeleted(this.id); @override List get props => [id]; } /// État de succès après inscription class EvenementInscrit extends EvenementsState { final String evenementId; const EvenementInscrit(this.evenementId); @override List get props => [evenementId]; } /// État de succès après désinscription class EvenementDesinscrit extends EvenementsState { final String evenementId; const EvenementDesinscrit(this.evenementId); @override List get props => [evenementId]; } /// État avec liste de participants class ParticipantsLoaded extends EvenementsState { final String evenementId; final List> participants; const ParticipantsLoaded({ required this.evenementId, required this.participants, }); @override List get props => [evenementId, participants]; } /// État avec statistiques class EvenementsStatsLoaded extends EvenementsState { final Map stats; const EvenementsStatsLoaded(this.stats); @override List get props => [stats]; } /// État d'erreur class EvenementsError extends EvenementsState { final String message; final String? code; final dynamic error; const EvenementsError({ required this.message, this.code, this.error, }); @override List get props => [message, code, error]; } /// État d'erreur réseau class EvenementsNetworkError extends EvenementsError { const EvenementsNetworkError({ required super.message, super.code, super.error, }); } /// État d'erreur de validation class EvenementsValidationError extends EvenementsError { final Map validationErrors; const EvenementsValidationError({ required super.message, required this.validationErrors, super.code, }); @override List get props => [message, code, validationErrors]; }