Resolve map problem.
This commit is contained in:
@@ -26,6 +26,8 @@ import 'package:travel_mate/blocs/activity/activity_state.dart';
|
||||
import 'package:travel_mate/blocs/balance/balance_bloc.dart';
|
||||
import 'package:travel_mate/blocs/balance/balance_event.dart';
|
||||
import 'package:travel_mate/blocs/balance/balance_state.dart';
|
||||
import 'package:travel_mate/blocs/group/group_bloc.dart';
|
||||
import 'package:travel_mate/blocs/group/group_event.dart';
|
||||
|
||||
import 'package:travel_mate/blocs/user/user_bloc.dart';
|
||||
import 'package:travel_mate/blocs/user/user_state.dart' as user_state;
|
||||
@@ -641,6 +643,20 @@ class _ShowTripDetailsContentState extends State<ShowTripDetailsContent> {
|
||||
),
|
||||
const Divider(),
|
||||
],
|
||||
if (!isCreator)
|
||||
ListTile(
|
||||
leading: Icon(Icons.exit_to_app, color: Colors.red[400]),
|
||||
title: Text(
|
||||
'Quitter le voyage',
|
||||
style: theme.textTheme.bodyLarge?.copyWith(
|
||||
color: Colors.red[400],
|
||||
),
|
||||
),
|
||||
onTap: () {
|
||||
Navigator.pop(context);
|
||||
_handleLeaveTrip(currentUser);
|
||||
},
|
||||
),
|
||||
ListTile(
|
||||
leading: Icon(
|
||||
Icons.share,
|
||||
@@ -682,6 +698,91 @@ class _ShowTripDetailsContentState extends State<ShowTripDetailsContent> {
|
||||
);
|
||||
}
|
||||
|
||||
void _handleLeaveTrip(user_state.UserModel? currentUser) {
|
||||
if (currentUser == null || _group == null) return;
|
||||
|
||||
// Vérifier les dettes
|
||||
final balanceState = context.read<BalanceBloc>().state;
|
||||
if (balanceState is GroupBalancesLoaded) {
|
||||
final myBalance = balanceState.balances.firstWhere(
|
||||
(b) => b.userId == currentUser.id,
|
||||
orElse: () => const UserBalance(
|
||||
userId: '',
|
||||
userName: '',
|
||||
totalPaid: 0,
|
||||
totalOwed: 0,
|
||||
balance: 0,
|
||||
),
|
||||
);
|
||||
|
||||
// Tolérance pour les arrondis (0.01€)
|
||||
if (myBalance.balance.abs() > 0.01) {
|
||||
_errorService.showError(
|
||||
message:
|
||||
'Vous devez régler vos dettes (ou récupérer votre argent) avant de quitter le voyage. Solde: ${myBalance.formattedBalance}',
|
||||
);
|
||||
return;
|
||||
}
|
||||
|
||||
_confirmLeaveTrip(currentUser.id);
|
||||
} else {
|
||||
// Si les balances ne sont pas chargées, on essaie de les charger et on demande de rééssayer
|
||||
context.read<BalanceBloc>().add(LoadGroupBalances(_group!.id));
|
||||
_errorService.showError(
|
||||
message:
|
||||
'Impossible de vérifier votre solde. Veuillez réessayer dans un instant.',
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
void _confirmLeaveTrip(String userId) {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
showDialog(
|
||||
context: context,
|
||||
builder: (context) => AlertDialog(
|
||||
backgroundColor:
|
||||
theme.dialogTheme.backgroundColor ?? theme.colorScheme.surface,
|
||||
title: Text(
|
||||
'Quitter le voyage',
|
||||
style: theme.textTheme.titleLarge?.copyWith(
|
||||
color: theme.colorScheme.onSurface,
|
||||
),
|
||||
),
|
||||
content: Text(
|
||||
'Êtes-vous sûr de vouloir quitter ce voyage ? Vous ne pourrez plus voir les détails ni les dépenses.',
|
||||
style: theme.textTheme.bodyMedium?.copyWith(
|
||||
color: theme.colorScheme.onSurface,
|
||||
),
|
||||
),
|
||||
actions: [
|
||||
TextButton(
|
||||
onPressed: () => Navigator.pop(context),
|
||||
child: Text(
|
||||
'Annuler',
|
||||
style: TextStyle(color: theme.colorScheme.primary),
|
||||
),
|
||||
),
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
Navigator.pop(context); // Fermer le dialog
|
||||
|
||||
if (_group != null) {
|
||||
context.read<GroupBloc>().add(
|
||||
RemoveMemberFromGroup(_group!.id, userId),
|
||||
);
|
||||
|
||||
// Retourner à l'écran d'accueil
|
||||
Navigator.pop(context);
|
||||
}
|
||||
},
|
||||
child: const Text('Quitter', style: TextStyle(color: Colors.red)),
|
||||
),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
|
||||
void _confirmDeleteTrip() {
|
||||
final theme = Theme.of(context);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user