feat: Implement group balance and expense management with new navigation and data handling
This commit is contained in:
@@ -5,6 +5,7 @@ import '../../services/balance_service.dart';
|
||||
import '../../services/error_service.dart';
|
||||
import 'balance_event.dart';
|
||||
import 'balance_state.dart';
|
||||
|
||||
class BalanceBloc extends Bloc<BalanceEvent, BalanceState> {
|
||||
final BalanceRepository _balanceRepository;
|
||||
final BalanceService _balanceService;
|
||||
@@ -19,20 +20,28 @@ class BalanceBloc extends Bloc<BalanceEvent, BalanceState> {
|
||||
_balanceService = balanceService ?? BalanceService(balanceRepository: balanceRepository, expenseRepository: expenseRepository),
|
||||
_errorService = errorService ?? ErrorService(),
|
||||
super(BalanceInitial()) {
|
||||
on<LoadGroupBalance>(_onLoadGroupBalance);
|
||||
on<LoadGroupBalances>(_onLoadGroupBalance);
|
||||
on<RefreshBalance>(_onRefreshBalance);
|
||||
on<MarkSettlementAsCompleted>(_onMarkSettlementAsCompleted);
|
||||
}
|
||||
|
||||
Future<void> _onLoadGroupBalance(
|
||||
LoadGroupBalance event,
|
||||
LoadGroupBalances event,
|
||||
Emitter<BalanceState> emit,
|
||||
) async {
|
||||
try {
|
||||
emit(BalanceLoading());
|
||||
|
||||
final groupBalance = await _balanceRepository.calculateGroupBalance(event.groupId);
|
||||
emit(BalanceLoaded(groupBalance));
|
||||
// Calculer les balances du groupe
|
||||
final userBalances = await _balanceRepository.calculateGroupUserBalances(event.groupId);
|
||||
|
||||
// Calculer les règlements optimisés
|
||||
final settlements = await _balanceService.calculateOptimalSettlements(event.groupId);
|
||||
|
||||
emit(GroupBalancesLoaded(
|
||||
balances: userBalances,
|
||||
settlements: settlements,
|
||||
));
|
||||
} catch (e) {
|
||||
_errorService.logError('BalanceBloc', 'Erreur chargement balance: $e');
|
||||
emit(BalanceError(e.toString()));
|
||||
@@ -45,12 +54,20 @@ class BalanceBloc extends Bloc<BalanceEvent, BalanceState> {
|
||||
) async {
|
||||
try {
|
||||
// Garde l'état actuel pendant le refresh si possible
|
||||
if (state is! BalanceLoaded) {
|
||||
if (state is! GroupBalancesLoaded) {
|
||||
emit(BalanceLoading());
|
||||
}
|
||||
|
||||
final groupBalance = await _balanceRepository.calculateGroupBalance(event.groupId);
|
||||
emit(BalanceLoaded(groupBalance));
|
||||
// Calculer les balances du groupe
|
||||
final userBalances = await _balanceRepository.calculateGroupUserBalances(event.groupId);
|
||||
|
||||
// Calculer les règlements optimisés
|
||||
final settlements = await _balanceService.calculateOptimalSettlements(event.groupId);
|
||||
|
||||
emit(GroupBalancesLoaded(
|
||||
balances: userBalances,
|
||||
settlements: settlements,
|
||||
));
|
||||
} catch (e) {
|
||||
_errorService.logError('BalanceBloc', 'Erreur refresh balance: $e');
|
||||
emit(BalanceError(e.toString()));
|
||||
|
||||
@@ -7,13 +7,13 @@ abstract class BalanceEvent extends Equatable {
|
||||
List<Object?> get props => [];
|
||||
}
|
||||
|
||||
class LoadGroupBalance extends BalanceEvent {
|
||||
class LoadGroupBalances extends BalanceEvent {
|
||||
final String groupId;
|
||||
|
||||
const LoadGroupBalance(this.groupId);
|
||||
|
||||
|
||||
const LoadGroupBalances(this.groupId);
|
||||
|
||||
@override
|
||||
List<Object?> get props => [groupId];
|
||||
List<Object> get props => [groupId];
|
||||
}
|
||||
|
||||
class RefreshBalance extends BalanceEvent {
|
||||
|
||||
@@ -1,5 +1,6 @@
|
||||
import 'package:equatable/equatable.dart';
|
||||
import '../../models/group_balance.dart';
|
||||
import '../../models/settlement.dart';
|
||||
import '../../models/user_balance.dart';
|
||||
|
||||
abstract class BalanceState extends Equatable {
|
||||
const BalanceState();
|
||||
@@ -12,13 +13,17 @@ class BalanceInitial extends BalanceState {}
|
||||
|
||||
class BalanceLoading extends BalanceState {}
|
||||
|
||||
class BalanceLoaded extends BalanceState {
|
||||
final GroupBalance groupBalance;
|
||||
|
||||
const BalanceLoaded(this.groupBalance);
|
||||
|
||||
class GroupBalancesLoaded extends BalanceState {
|
||||
final List<UserBalance> balances;
|
||||
final List<Settlement> settlements;
|
||||
|
||||
const GroupBalancesLoaded({
|
||||
required this.balances,
|
||||
required this.settlements,
|
||||
});
|
||||
|
||||
@override
|
||||
List<Object?> get props => [groupBalance];
|
||||
List<Object> get props => [balances, settlements];
|
||||
}
|
||||
|
||||
class BalanceOperationSuccess extends BalanceState {
|
||||
|
||||
Reference in New Issue
Block a user