48 lines
1.5 KiB
Dart
48 lines
1.5 KiB
Dart
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<TradeEvent, TradeState> {
|
|
final TradeRepository repository;
|
|
|
|
TradeBloc({required this.repository}) : super(TradeInitial()) {
|
|
on<FetchTrades>(_onFetchTrades);
|
|
on<CloseTrade>(_onCloseTrade);
|
|
on<AcceptTradeProposalEvent>(_onAcceptTradeProposal);
|
|
}
|
|
|
|
Future<void> _onFetchTrades(FetchTrades event, Emitter<TradeState> 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<void> _onCloseTrade(CloseTrade event, Emitter<TradeState> emit) async {
|
|
emit(TradeLoading());
|
|
try {
|
|
await repository.closeTrade(event.tradeId, dto: event.dto);
|
|
final trades = await repository.fetchTrades();
|
|
emit(TradeLoaded(trades));
|
|
} catch (e) {
|
|
emit(const TradeError("Position konnte nicht geschlossen werden"));
|
|
}
|
|
}
|
|
|
|
Future<void> _onAcceptTradeProposal(AcceptTradeProposalEvent event, Emitter<TradeState> 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"));
|
|
}
|
|
}
|
|
}
|