library admin_users_bloc; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:injectable/injectable.dart'; import '../data/models/admin_user_model.dart'; import '../data/repositories/admin_user_repository.dart'; part 'admin_users_event.dart'; part 'admin_users_state.dart'; @injectable class AdminUsersBloc extends Bloc { final AdminUserRepository _repository; AdminUsersBloc(this._repository) : super(AdminUsersInitial()) { on(_onLoadRequested); on(_onDetailRequested); on(_onDetailWithRolesRequested); on(_onRolesUpdateRequested); on(_onRolesLoadRequested); } Future _onLoadRequested(AdminUsersLoadRequested e, Emitter emit) async { emit(AdminUsersLoading()); try { final result = await _repository.search( page: e.page, size: e.size, search: e.search, ); emit(AdminUsersLoaded( users: result.users, totalCount: result.totalCount, currentPage: result.currentPage, pageSize: result.pageSize, totalPages: result.totalPages, )); } catch (err) { emit(AdminUsersError(err.toString())); } } Future _onDetailRequested(AdminUserDetailRequested e, Emitter emit) async { emit(AdminUsersLoading()); try { final user = await _repository.getById(e.userId); if (user == null) { emit(AdminUsersError('Utilisateur non trouvé')); return; } final roles = await _repository.getUserRoles(e.userId); emit(AdminUserDetailLoaded(user: user, userRoles: roles)); } catch (err) { emit(AdminUsersError(err.toString())); } } Future _onDetailWithRolesRequested(AdminUserDetailWithRolesRequested e, Emitter emit) async { emit(AdminUsersLoading()); try { final user = await _repository.getById(e.userId); if (user == null) { emit(AdminUsersError('Utilisateur non trouvé')); return; } final userRoles = await _repository.getUserRoles(e.userId); final allRoles = await _repository.getRealmRoles(); emit(AdminUserDetailLoaded(user: user, userRoles: userRoles, allRoles: allRoles)); } catch (err) { emit(AdminUsersError(err.toString())); } } Future _onRolesUpdateRequested(AdminUserRolesUpdateRequested e, Emitter emit) async { try { await _repository.setUserRoles(e.userId, e.roleNames); emit(AdminUserRolesUpdated()); add(AdminUserDetailWithRolesRequested(e.userId)); } catch (err) { emit(AdminUsersError(err.toString())); } } Future _onRolesLoadRequested(AdminRolesLoadRequested e, Emitter emit) async { try { final roles = await _repository.getRealmRoles(); emit(AdminRolesLoaded(roles)); } catch (err) { emit(AdminUsersError(err.toString())); } } }