From f65f65112c61496a54aa31168f038d246a6dc2de Mon Sep 17 00:00:00 2001 From: qguillaume Date: Mon, 29 Jun 2026 10:16:16 +0200 Subject: [PATCH] =?UTF-8?q?feat:=20bouton=20nuage=20d'export=20vers=20le?= =?UTF-8?q?=20backend=20IA=20dans=20l'=C3=A9cran=20d'analyse?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- lib/features/analysis/analysis_screen.dart | 47 ++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/lib/features/analysis/analysis_screen.dart b/lib/features/analysis/analysis_screen.dart index d5134ed3..71d00b71 100644 --- a/lib/features/analysis/analysis_screen.dart +++ b/lib/features/analysis/analysis_screen.dart @@ -17,6 +17,7 @@ import '../../data/repositories/session_repository.dart'; import '../../services/target_detection_service.dart'; import '../../services/score_calculator_service.dart'; import '../../services/grouping_analyzer_service.dart'; +import '../../services/wallet_identity_service.dart'; import '../session/session_provider.dart'; import 'analysis_provider.dart'; import 'impact_editor_screen.dart'; @@ -257,6 +258,52 @@ class _AnalysisScreenContentState extends State<_AnalysisScreenContent> { context.read().targetType!, ), ), + // Nuage d'export vers le backend IA : visible uniquement si l'analyse + // a réussi ET que l'utilisateur a activé l'option dans les Paramètres. + if (!_isCalibrating && !_isSelectingReferences) + FutureBuilder( + future: WalletIdentityService().isUploadEnabled(), + builder: (context, snapshot) { + final isEnabled = snapshot.data ?? false; + if (!isEnabled || + provider.state != AnalysisState.success) { + return const SizedBox.shrink(); + } + return IconButton( + icon: const Icon(Icons.cloud_upload), + tooltip: 'Exporter pour IA', + onPressed: () async { + final p = context.read(); + if (p.state != AnalysisState.success) return; + + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar(content: Text('Exportation en cours...')), + ); + + final success = await p.exportToAiBackend(); + + if (!context.mounted) return; + ScaffoldMessenger.of(context).hideCurrentSnackBar(); + if (success) { + ScaffoldMessenger.of(context).showSnackBar( + const SnackBar( + content: Text('Export réussi vers le backend IA !'), + backgroundColor: AppTheme.successColor, + ), + ); + } else { + ScaffoldMessenger.of(context).showSnackBar( + SnackBar( + content: + Text(p.errorMessage ?? 'Erreur d\'export'), + backgroundColor: AppTheme.errorColor, + ), + ); + } + }, + ); + }, + ), if (_isCalibrating) TextButton( onPressed: () {