import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:mchess/utils/chess_utils.dart'; class PromotionUiBloc extends Bloc { static final PromotionUiBloc _instance = PromotionUiBloc._internal(); PromotionUiBloc._internal() : super(PromotionUiState.init()) { on(promotionMoveHandler); } void promotionMoveHandler( PawnMovedToPromotionField event, Emitter emit, ) { emit(PromotionUiState( showPromotionDialog: true, colorMoved: event.colorMoved)); } factory PromotionUiBloc.getInstance() { return PromotionUiBloc(); } factory PromotionUiBloc() { return _instance; } } abstract class PromotionEvent {} class PawnMovedToPromotionField extends PromotionEvent { final ChessCoordinate endSquare; final ChessColor colorMoved; PawnMovedToPromotionField( {required this.endSquare, required this.colorMoved}); } class PromotionUiState { final bool showPromotionDialog; final ChessColor colorMoved; PromotionUiState( {required this.showPromotionDialog, required this.colorMoved}); factory PromotionUiState.init() { return PromotionUiState( showPromotionDialog: false, colorMoved: ChessColor.white); } }