import 'package:bloc/bloc.dart'; import 'package:dartz/dartz.dart'; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:injectable/injectable.dart'; import '../../../domain/game/game.dart'; part 'game_spin_event.dart'; part 'game_spin_state.dart'; part 'game_spin_bloc.freezed.dart'; @injectable class GameSpinBloc extends Bloc { final IGameRepository _repository; GameSpinBloc(this._repository) : super(GameSpinState.initial()) { on(_onGameSpinEvent); } Future _onGameSpinEvent( GameSpinEvent event, Emitter emit, ) { return event.map( spun: (e) async { if (state.isSpinning) return; emit(state.copyWith(isSpinning: true, failureOrResultOption: none())); final result = await _repository.spin(gameId: e.gameId); emit( state.copyWith( isSpinning: false, failureOrResultOption: optionOf(result), ), ); }, ); } }