Files
unionflow-client-quarkus-pr…/unionflow-mobile-apps/lib/features/members/bloc/membres_state.dart
2025-11-17 16:02:04 +00:00

181 lines
4.0 KiB
Dart

/// É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<Object?> 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<MembreCompletModel> currentMembres;
const MembresRefreshing(this.currentMembres);
@override
List<Object?> get props => [currentMembres];
}
/// État de succès avec liste de membres
class MembresLoaded extends MembresState {
final List<MembreCompletModel> 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<Object?> get props => [membres, totalElements, currentPage, pageSize, totalPages, hasMore];
MembresLoaded copyWith({
List<MembreCompletModel>? 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<Object?> get props => [membre];
}
/// État de succès après création
class MembreCreated extends MembresState {
final MembreCompletModel membre;
const MembreCreated(this.membre);
@override
List<Object?> get props => [membre];
}
/// État de succès après mise à jour
class MembreUpdated extends MembresState {
final MembreCompletModel membre;
const MembreUpdated(this.membre);
@override
List<Object?> get props => [membre];
}
/// État de succès après suppression
class MembreDeleted extends MembresState {
final String id;
const MembreDeleted(this.id);
@override
List<Object?> get props => [id];
}
/// État de succès après activation
class MembreActivated extends MembresState {
final MembreCompletModel membre;
const MembreActivated(this.membre);
@override
List<Object?> get props => [membre];
}
/// État de succès après désactivation
class MembreDeactivated extends MembresState {
final MembreCompletModel membre;
const MembreDeactivated(this.membre);
@override
List<Object?> get props => [membre];
}
/// État avec statistiques
class MembresStatsLoaded extends MembresState {
final Map<String, dynamic> stats;
const MembresStatsLoaded(this.stats);
@override
List<Object?> 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<Object?> get props => [message, code, error];
}
/// État d'erreur réseau
class MembresNetworkError extends MembresError {
const MembresNetworkError({
required super.message,
super.code,
super.error,
});
}
/// État d'erreur de validation
class MembresValidationError extends MembresError {
final Map<String, String> validationErrors;
const MembresValidationError({
required super.message,
required this.validationErrors,
super.code,
});
@override
List<Object?> get props => [message, code, validationErrors];
}