feat: Consolidate group and account creation into a single method and improve error handling in trip creation
This commit is contained in:
@@ -115,8 +115,7 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
if (tripState is TripCreated) {
|
||||
// Stocker l'ID du trip et créer le groupe
|
||||
_createdTripId = tripState.tripId;
|
||||
_createGroupForTrip(_createdTripId!);
|
||||
_createAccountForTrip(_createdTripId!);
|
||||
_createGroupAndAccountForTrip(_createdTripId!);
|
||||
} else if (tripState is TripOperationSuccess) {
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
@@ -125,6 +124,9 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
);
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
Navigator.pop(context);
|
||||
if (isEditing) {
|
||||
Navigator.pop(context);
|
||||
@@ -579,24 +581,27 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
return groupMembers;
|
||||
}
|
||||
|
||||
Future<void> _createGroupForTrip(String tripId) async {
|
||||
Future<void> _createGroupAndAccountForTrip(String tripId) async {
|
||||
final groupBloc = context.read<GroupBloc>();
|
||||
final accountBloc = context.read<AccountBloc>();
|
||||
|
||||
try {
|
||||
|
||||
final userState = context.read<UserBloc>().state;
|
||||
if (userState is! user_state.UserLoaded) return;
|
||||
if (userState is! user_state.UserLoaded) {
|
||||
throw Exception('Utilisateur non connecté');
|
||||
}
|
||||
|
||||
final currentUser = userState.user;
|
||||
|
||||
// Créer le groupe avec le tripId récupéré
|
||||
final group = Group(
|
||||
id: '', // Sera généré par Firestore
|
||||
id: '',
|
||||
name: _titleController.text.trim(),
|
||||
tripId: tripId,
|
||||
createdBy: currentUser.id,
|
||||
);
|
||||
|
||||
final groupMembers = await _createMembers();
|
||||
|
||||
if (groupMembers.isEmpty) {
|
||||
throw Exception('Erreur lors de la création des membres du groupe');
|
||||
}
|
||||
@@ -605,77 +610,43 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
group: group,
|
||||
members: groupMembers,
|
||||
));
|
||||
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('Voyage et groupe créés avec succès !'),
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'create_trip_content.dart',
|
||||
'Erreur lors de la création du groupe: $e',
|
||||
);
|
||||
|
||||
if (mounted) {
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Future<void> _createAccountForTrip(String tripId) async {
|
||||
final accountBloc = context.read<AccountBloc>();
|
||||
try {
|
||||
final userState = context.read<UserBloc>().state;
|
||||
if (userState is! user_state.UserLoaded) return;
|
||||
|
||||
final account = Account(
|
||||
id: '',
|
||||
tripId: tripId,
|
||||
name: _titleController.text.trim(),
|
||||
);
|
||||
|
||||
final accountsMembers = await _createMembers();
|
||||
|
||||
accountBloc.add(CreateAccountWithMembers(
|
||||
account: account,
|
||||
members: accountsMembers,
|
||||
members: groupMembers,
|
||||
));
|
||||
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('Compte créé avec succès !'),
|
||||
content: Text('Voyage, groupe et compte créés avec succès !'),
|
||||
backgroundColor: Colors.green,
|
||||
),
|
||||
);
|
||||
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
|
||||
Navigator.pop(context);
|
||||
}
|
||||
|
||||
|
||||
} catch (e) {
|
||||
_errorService.logError(
|
||||
'create_trip_content.dart',
|
||||
'Erreur lors de la création du compte: $e',
|
||||
'Erreur lors de la création du groupe et compte: $e',
|
||||
);
|
||||
|
||||
if (mounted) {
|
||||
ScaffoldMessenger.of(context).showSnackBar(
|
||||
SnackBar(
|
||||
content: Text('Erreur: $e'),
|
||||
backgroundColor: Colors.red,
|
||||
),
|
||||
);
|
||||
setState(() {
|
||||
_isLoading = false;
|
||||
});
|
||||
@@ -683,6 +654,8 @@ class _CreateTripContentState extends State<CreateTripContent> {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
Future<void> _saveTrip(user_state.UserModel currentUser) async {
|
||||
if (!_formKey.currentState!.validate()) {
|
||||
return;
|
||||
|
||||
@@ -1,7 +1,5 @@
|
||||
import 'package:flutter/material.dart';
|
||||
import 'package:provider/provider.dart';
|
||||
import 'package:travel_mate/blocs/group/group_bloc.dart';
|
||||
import 'package:travel_mate/blocs/group/group_event.dart';
|
||||
import 'package:travel_mate/blocs/trip/trip_bloc.dart';
|
||||
import 'package:travel_mate/blocs/trip/trip_event.dart';
|
||||
import 'package:travel_mate/components/home/create_trip_content.dart';
|
||||
@@ -142,7 +140,6 @@ class _ShowTripDetailsContentState extends State<ShowTripDetailsContent> {
|
||||
TextButton(
|
||||
onPressed: () {
|
||||
context.read<TripBloc>().add(TripDeleteRequested(tripId: widget.trip.id!));
|
||||
context.read<GroupBloc>().add(DeleteGroup(widget.trip.id!));
|
||||
Navigator.pop(context); // Fermer le dialogue
|
||||
Navigator.pop(context, true); // Retourner à l'écran précédent
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user