import 'package:bloc/bloc.dart'; import 'package:equatable/equatable.dart'; import '../../../data/dtos/hero_dto.dart'; import '../../../data/repositories/hero_repository.dart'; // Events abstract class HeroDetailEvent extends Equatable { @override List get props => []; } class FetchHeroDetails extends HeroDetailEvent { final int heroId; FetchHeroDetails(this.heroId); @override List get props => [heroId]; } // States abstract class HeroDetailState extends Equatable { @override List get props => []; } class HeroDetailInitial extends HeroDetailState {} class HeroDetailLoading extends HeroDetailState {} class HeroDetailLoaded extends HeroDetailState { final HeroDto hero; HeroDetailLoaded(this.hero); @override List get props => [hero]; } class HeroDetailError extends HeroDetailState { final String message; HeroDetailError(this.message); @override List get props => [message]; } // BLoC class HeroDetailBloc extends Bloc { final HeroRepository heroRepository; HeroDetailBloc(this.heroRepository) : super(HeroDetailInitial()) { on((event, emit) async { emit(HeroDetailLoading()); try { final hero = await heroRepository.getHeroDetails(event.heroId); emit(HeroDetailLoaded(hero)); } catch (e) { emit(HeroDetailError(e.toString())); } }); } }