import 'package:bloc/bloc.dart'; import 'package:dartz/dartz.dart' hide Order; import 'package:freezed_annotation/freezed_annotation.dart'; import 'package:injectable/injectable.dart' hide Order; import '../../../domain/order/order.dart'; import '../../../domain/printer/printer.dart'; part 'print_struck_event.dart'; part 'print_struck_state.dart'; part 'print_struck_bloc.freezed.dart'; @injectable class PrintStruckBloc extends Bloc { final IPrinterRepository _printerRepository; PrintStruckBloc(this._printerRepository) : super(PrintStruckState.initial()) { on(_onPrintStruckEvent); } Future _onPrintStruckEvent( PrintStruckEvent event, Emitter emit, ) { return event.map( order: (e) async { Either failureOrSuccess; emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none())); failureOrSuccess = await _printerRepository.printStruckOrder( order: e.order, ); emit( state.copyWith( isPrinting: false, failureOrPrintStruck: optionOf(failureOrSuccess), ), ); }, saveOrder: (e) async { Either failureOrSuccess; emit(state.copyWith(isPrinting: true, failureOrPrintStruck: none())); failureOrSuccess = await _printerRepository.printStruckSaveOrder( order: e.order, ); emit( state.copyWith( isPrinting: false, failureOrPrintStruck: optionOf(failureOrSuccess), ), ); }, ); } }