feat(App): update Finlytic Flutter app UI and blocs
This commit is contained in:
@@ -0,0 +1,47 @@
|
||||
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);
|
||||
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"));
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,37 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import '../models/trade_acceptance_dto.dart';
|
||||
|
||||
abstract class TradeEvent extends Equatable {
|
||||
const TradeEvent();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class FetchTrades extends TradeEvent {
|
||||
final String? status;
|
||||
final String? isin;
|
||||
|
||||
const FetchTrades({this.status, this.isin});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [status, isin];
|
||||
}
|
||||
|
||||
class CloseTrade extends TradeEvent {
|
||||
final String tradeId;
|
||||
|
||||
const CloseTrade(this.tradeId);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [tradeId];
|
||||
}
|
||||
|
||||
class AcceptTradeProposalEvent extends TradeEvent {
|
||||
final TradeAcceptanceDto dto;
|
||||
|
||||
const AcceptTradeProposalEvent(this.dto);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [dto];
|
||||
}
|
||||
@@ -0,0 +1,31 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import 'package:finlytic_app/features/trades/models/trade_model.dart';
|
||||
|
||||
abstract class TradeState extends Equatable {
|
||||
const TradeState();
|
||||
|
||||
@override
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class TradeInitial extends TradeState {}
|
||||
|
||||
class TradeLoading extends TradeState {}
|
||||
|
||||
class TradeLoaded extends TradeState {
|
||||
final List<TradeModel> trades;
|
||||
|
||||
const TradeLoaded(this.trades);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [trades];
|
||||
}
|
||||
|
||||
class TradeError extends TradeState {
|
||||
final String message;
|
||||
|
||||
const TradeError(this.message);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [message];
|
||||
}
|
||||
Reference in New Issue
Block a user