import 'package:flutter_bloc/flutter_bloc.dart'; import '../../domain/entities/user.dart'; import '../../domain/usecases/get_user.dart'; /// Bloc pour la gestion des événements et états liés à l'utilisateur. class UserBloc extends Bloc { /// Constructeur avec injection du cas d'utilisation `GetUser`. UserBloc({required this.getUser}) : super(UserInitial()); final GetUser getUser; @override Stream mapEventToState(UserEvent event) async* { if (event is GetUserById) { yield UserLoading(); final either = await getUser(event.id); yield either.fold( (failure) => UserError(), (user) => UserLoaded(user: user), ); } } } /// Classe abstraite représentant les événements liés à l'utilisateur. abstract class UserEvent {} /// Événement pour récupérer un utilisateur par son ID. class GetUserById extends UserEvent { GetUserById(this.id); final String id; } /// Classe abstraite représentant les états possibles du BLoC utilisateur. abstract class UserState {} /// État initial lorsque rien n'est encore chargé. class UserInitial extends UserState {} /// État indiquant que les données utilisateur sont en cours de chargement. class UserLoading extends UserState {} /// État indiquant que les données utilisateur ont été chargées avec succès. class UserLoaded extends UserState { UserLoaded({required this.user}); final User user; } /// État indiquant qu'une erreur est survenue lors de la récupération des données utilisateur. class UserError extends UserState {}