feat: Version 3.6.2 - Correctifs tâches #17-20
- #17: Amélioration gestion des secteurs et statistiques - #18: Optimisation services API et logs - #19: Corrections Flutter widgets et repositories - #20: Fix création passage - détection automatique ope_users.id vs users.id Suppression dossier web/ (migration vers app Flutter) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
@@ -31,6 +31,7 @@ class ApiException implements Exception {
|
||||
if (response?.data != null) {
|
||||
try {
|
||||
final data = response!.data as Map<String, dynamic>;
|
||||
debugPrint('🔍 API Error Response: $data');
|
||||
|
||||
// Message spécifique de l'API
|
||||
if (data.containsKey('message')) {
|
||||
@@ -42,12 +43,21 @@ class ApiException implements Exception {
|
||||
errorCode = data['error_code'] as String;
|
||||
}
|
||||
|
||||
// Détails supplémentaires
|
||||
// Détails supplémentaires - peut être une Map ou une List
|
||||
if (data.containsKey('errors')) {
|
||||
details = data['errors'] as Map<String, dynamic>?;
|
||||
final errorsData = data['errors'];
|
||||
if (errorsData is Map<String, dynamic>) {
|
||||
// Format: {field: [errors]}
|
||||
details = errorsData;
|
||||
} else if (errorsData is List) {
|
||||
// Format: [error1, error2, ...]
|
||||
details = {'errors': errorsData};
|
||||
}
|
||||
debugPrint('🔍 Validation Errors: $details');
|
||||
}
|
||||
} catch (e) {
|
||||
// Si on ne peut pas parser la réponse, utiliser le message par défaut
|
||||
debugPrint('⚠️ Impossible de parser la réponse d\'erreur: $e');
|
||||
}
|
||||
}
|
||||
|
||||
@@ -130,7 +140,43 @@ class ApiException implements Exception {
|
||||
String toString() => message;
|
||||
|
||||
/// Obtenir un message d'erreur formaté pour l'affichage
|
||||
String get displayMessage => message;
|
||||
String get displayMessage {
|
||||
debugPrint('🔍 [displayMessage] statusCode: $statusCode');
|
||||
debugPrint('🔍 [displayMessage] isValidationError: $isValidationError');
|
||||
debugPrint('🔍 [displayMessage] details: $details');
|
||||
debugPrint('🔍 [displayMessage] details != null: ${details != null}');
|
||||
debugPrint('🔍 [displayMessage] details!.isNotEmpty: ${details != null ? details!.isNotEmpty : "null"}');
|
||||
|
||||
// Si c'est une erreur de validation avec des détails, formater le message
|
||||
if (isValidationError && details != null && details!.isNotEmpty) {
|
||||
debugPrint('✅ [displayMessage] Formatage des erreurs de validation');
|
||||
final buffer = StringBuffer(message);
|
||||
buffer.write('\n');
|
||||
|
||||
details!.forEach((field, errors) {
|
||||
if (errors is List) {
|
||||
// Si le champ est 'errors', c'est une liste simple d'erreurs
|
||||
if (field == 'errors') {
|
||||
for (final error in errors) {
|
||||
buffer.write('• $error\n');
|
||||
}
|
||||
} else {
|
||||
// Sinon c'est un champ avec une liste d'erreurs
|
||||
for (final error in errors) {
|
||||
buffer.write('• $field: $error\n');
|
||||
}
|
||||
}
|
||||
} else {
|
||||
buffer.write('• $field: $errors\n');
|
||||
}
|
||||
});
|
||||
|
||||
return buffer.toString().trim();
|
||||
}
|
||||
|
||||
debugPrint('⚠️ [displayMessage] Retour du message simple');
|
||||
return message;
|
||||
}
|
||||
|
||||
/// Vérifier si c'est une erreur de validation
|
||||
bool get isValidationError => statusCode == 422 || statusCode == 400;
|
||||
|
||||
Reference in New Issue
Block a user