import 'dart:async'; import 'package:flutter_bloc/flutter_bloc.dart'; import 'package:finlytic_app/features/trades/repositories/trade_repository.dart'; import 'trade_event.dart'; import 'trade_state.dart'; class TradeBloc extends Bloc { final TradeRepository repository; TradeBloc({required this.repository}) : super(TradeInitial()) { on(_onFetchTrades); on(_onCloseTrade); on(_onAcceptTradeProposal); } Future _onFetchTrades(FetchTrades event, Emitter emit) async { emit(TradeLoading()); try { final trades = await repository.fetchTrades(isin: event.isin, status: event.status); emit(TradeLoaded(trades)); } catch (e) { emit(const TradeError("Trades konnten nicht geladen werden")); } } Future _onCloseTrade(CloseTrade event, Emitter emit) async { emit(TradeLoading()); try { await repository.closeTrade(event.tradeId); final trades = await repository.fetchTrades(); emit(TradeLoaded(trades)); } catch (e) { emit(const TradeError("Position konnte nicht geschlossen werden")); } } Future _onAcceptTradeProposal(AcceptTradeProposalEvent event, Emitter emit) async { emit(TradeLoading()); try { await repository.acceptTrade(event.dto); final trades = await repository.fetchTrades(); emit(TradeLoaded(trades)); } catch (e) { emit(const TradeError("Trade konnte nicht akzeptiert werden")); } } }