feat: Version 3.5.2 - Configuration Stripe et gestion des immeubles

- Configuration complète Stripe pour les 3 environnements (DEV/REC/PROD)
  * DEV: Clés TEST Pierre (mode test)
  * REC: Clés TEST Client (mode test)
  * PROD: Clés LIVE Client (mode live)
- Ajout de la gestion des bases de données immeubles/bâtiments
  * Configuration buildings_database pour DEV/REC/PROD
  * Service BuildingService pour enrichissement des adresses
- Optimisations pages et améliorations ergonomie
- Mises à jour des dépendances Composer
- Nettoyage des fichiers obsolètes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
pierre
2025-11-09 18:26:27 +01:00
parent 21657a3820
commit 2f5946a184
812 changed files with 142105 additions and 25992 deletions

View File

@@ -7,6 +7,8 @@ import 'package:geosector_app/core/services/current_amicale_service.dart';
import 'package:geosector_app/presentation/widgets/connectivity_indicator.dart';
import 'package:geosector_app/presentation/widgets/user_form_dialog.dart';
import 'package:geosector_app/core/utils/api_exception.dart';
import 'package:geosector_app/presentation/widgets/loading_spin_overlay.dart';
import 'package:geosector_app/presentation/widgets/result_dialog.dart';
import 'package:go_router/go_router.dart';
/// AppBar personnalisée pour les tableaux de bord
@@ -184,19 +186,45 @@ class DashboardAppBar extends StatelessWidget implements PreferredSizeWidget {
readOnly: false,
showRoleSelector: false,
onSubmit: (updatedUser, {String? password}) async {
// Afficher le loading
final overlay = LoadingSpinOverlayUtils.show(
context: context,
message: 'Mise à jour du profil...',
);
try {
// Sauvegarder les modifications de l'utilisateur
// Note: password est ignoré ici car l'utilisateur normal ne peut pas changer son mot de passe
await userRepository.updateUser(updatedUser);
// Masquer le loading
LoadingSpinOverlayUtils.hideSpecific(overlay);
if (context.mounted) {
Navigator.of(context).pop();
ApiException.showSuccess(context, 'Profil mis à jour');
// Afficher le résultat de succès
await ResultDialog.show(
context: context,
success: true,
message: 'Profil mis à jour',
);
if (context.mounted) {
Navigator.of(context).pop();
}
}
} catch (e) {
debugPrint('❌ Erreur mise à jour de votre profil: $e');
// Masquer le loading
LoadingSpinOverlayUtils.hideSpecific(overlay);
if (context.mounted) {
ApiException.showError(context, e);
// Afficher l'erreur
await ResultDialog.show(
context: context,
success: false,
message: ApiException.fromError(e).message,
);
}
}
},