Files
unionflow-server-api/unionflow-mobile-apps/lib/features/events/bloc/evenements_state.dart

195 lines
4.4 KiB
Dart

/// É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<Object?> 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<EvenementModel> currentEvenements;
const EvenementsRefreshing(this.currentEvenements);
@override
List<Object?> get props => [currentEvenements];
}
/// État de succès avec liste d'événements
class EvenementsLoaded extends EvenementsState {
final List<EvenementModel> 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<Object?> get props => [evenements, total, page, size, totalPages, hasMore];
EvenementsLoaded copyWith({
List<EvenementModel>? 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<Object?> get props => [evenement];
}
/// État de succès après création
class EvenementCreated extends EvenementsState {
final EvenementModel evenement;
const EvenementCreated(this.evenement);
@override
List<Object?> get props => [evenement];
}
/// État de succès après mise à jour
class EvenementUpdated extends EvenementsState {
final EvenementModel evenement;
const EvenementUpdated(this.evenement);
@override
List<Object?> get props => [evenement];
}
/// État de succès après suppression
class EvenementDeleted extends EvenementsState {
final String id;
const EvenementDeleted(this.id);
@override
List<Object?> get props => [id];
}
/// État de succès après inscription
class EvenementInscrit extends EvenementsState {
final String evenementId;
const EvenementInscrit(this.evenementId);
@override
List<Object?> get props => [evenementId];
}
/// État de succès après désinscription
class EvenementDesinscrit extends EvenementsState {
final String evenementId;
const EvenementDesinscrit(this.evenementId);
@override
List<Object?> get props => [evenementId];
}
/// État avec liste de participants
class ParticipantsLoaded extends EvenementsState {
final String evenementId;
final List<Map<String, dynamic>> participants;
const ParticipantsLoaded({
required this.evenementId,
required this.participants,
});
@override
List<Object?> get props => [evenementId, participants];
}
/// État avec statistiques
class EvenementsStatsLoaded extends EvenementsState {
final Map<String, dynamic> stats;
const EvenementsStatsLoaded(this.stats);
@override
List<Object?> 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<Object?> get props => [message, code, error];
}
/// État d'erreur réseau
class EvenementsNetworkError extends EvenementsError {
const EvenementsNetworkError({
required String message,
String? code,
dynamic error,
}) : super(message: message, code: code, error: error);
}
/// État d'erreur de validation
class EvenementsValidationError extends EvenementsError {
final Map<String, String> validationErrors;
const EvenementsValidationError({
required String message,
required this.validationErrors,
String? code,
}) : super(message: message, code: code);
@override
List<Object?> get props => [message, code, validationErrors];
}