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