chore: supprime le code mort signale par flutter analyze

Retire imports, champs et variables locales non utilises (14 warnings) :
- imports inutilises (app, database_helper, impact_editor, target_calibration, session_provider)
- champs write-only de capture_screen (_cropService, _scanAnimation, _isCameraInitialized, _alignmentStatus) et _movingShotId
- bloc de calcul mort dans crop_screen et variables locales (themeProvider, ny)

_filterType (history_screen) volontairement conserve : c'est une fonctionnalite de filtre inachevee, pas du code mort.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
qguillaume
2026-06-16 10:50:25 +02:00
parent 1d8124c8d8
commit 00ae0117c5
10 changed files with 0 additions and 48 deletions

View File

@@ -3,7 +3,6 @@ import 'package:provider/provider.dart';
import 'core/theme/theme_provider.dart'; import 'core/theme/theme_provider.dart';
import 'core/theme/app_theme.dart'; import 'core/theme/app_theme.dart';
import 'main_navigation_holder.dart'; import 'main_navigation_holder.dart';
import 'features/home/home_screen.dart';
import 'package:flutter_localizations/flutter_localizations.dart'; import 'package:flutter_localizations/flutter_localizations.dart';
class BullyApp extends StatelessWidget { class BullyApp extends StatelessWidget {

View File

@@ -1,4 +1,3 @@
import 'dart:io';
import 'package:sqflite/sqflite.dart'; import 'package:sqflite/sqflite.dart';
import 'package:path/path.dart'; import 'package:path/path.dart';
import '../models/session.dart'; import '../models/session.dart';

View File

@@ -118,7 +118,6 @@ class _AnalysisScreenContentState extends State<_AnalysisScreenContent> {
TransformationController(); TransformationController();
final GlobalKey _imageKey = GlobalKey(); final GlobalKey _imageKey = GlobalKey();
double _currentZoomScale = 1.0; double _currentZoomScale = 1.0;
String? _movingShotId;
@override @override
void initState() { void initState() {

View File

@@ -20,7 +20,6 @@ import 'dart:math' as math;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import 'package:provider/provider.dart'; import 'package:provider/provider.dart';
import '../../core/theme/app_theme.dart';
import '../../data/models/shot.dart'; import '../../data/models/shot.dart';
import 'analysis_provider.dart'; import 'analysis_provider.dart';
import 'widgets/target_overlay.dart'; import 'widgets/target_overlay.dart';

View File

@@ -4,7 +4,6 @@
/// Les anneaux sont répartis proportionnellement. /// Les anneaux sont répartis proportionnellement.
library; library;
import 'dart:math' as math;
import 'package:flutter/material.dart'; import 'package:flutter/material.dart';
import '../../../core/theme/app_theme.dart'; import '../../../core/theme/app_theme.dart';
import '../../../data/models/target_type.dart'; import '../../../data/models/target_type.dart';

View File

@@ -15,7 +15,6 @@ import '../../data/models/target_type.dart';
import '../crop/crop_screen.dart'; import '../crop/crop_screen.dart';
import '../session/session_provider.dart'; import '../session/session_provider.dart';
import 'widgets/image_source_button.dart'; import 'widgets/image_source_button.dart';
import '../../services/image_crop_service.dart';
import '../../services/opencv_target_service.dart'; import '../../services/opencv_target_service.dart';
import '../../services/parallelism_service.dart'; // NOUVEAU import '../../services/parallelism_service.dart'; // NOUVEAU
import 'package:image/image.dart' as img; import 'package:image/image.dart' as img;
@@ -31,7 +30,6 @@ class CaptureScreen extends StatefulWidget {
class _CaptureScreenState extends State<CaptureScreen> class _CaptureScreenState extends State<CaptureScreen>
with SingleTickerProviderStateMixin { with SingleTickerProviderStateMixin {
final ImagePicker _picker = ImagePicker(); final ImagePicker _picker = ImagePicker();
final ImageCropService _cropService = ImageCropService();
final TargetType _selectedType = TargetType.concentric; final TargetType _selectedType = TargetType.concentric;
final OpenCVTargetService _opencvService = OpenCVTargetService(); final OpenCVTargetService _opencvService = OpenCVTargetService();
@@ -56,15 +54,12 @@ class _CaptureScreenState extends State<CaptureScreen>
// Caméra live // Caméra live
CameraController? _cameraController; CameraController? _cameraController;
List<CameraDescription>? _cameras; List<CameraDescription>? _cameras;
bool _isCameraInitialized = false;
bool _showLiveCamera = false; bool _showLiveCamera = false;
// Animation pulsation du viseur // Animation pulsation du viseur
late AnimationController _scanAnimationController; late AnimationController _scanAnimationController;
late Animation<double> _scanAnimation;
// Détection OpenCV (cible circulaire) — on garde le résultat COMPLET // Détection OpenCV (cible circulaire) — on garde le résultat COMPLET
bool? _alignmentStatus;
TargetDetectionResult? _targetResult; // NOUVEAU : centre + rayon de la cible TargetDetectionResult? _targetResult; // NOUVEAU : centre + rayon de la cible
Timer? _detectionTimer; Timer? _detectionTimer;
bool _isAnalyzingFrame = false; bool _isAnalyzingFrame = false;
@@ -80,10 +75,6 @@ class _CaptureScreenState extends State<CaptureScreen>
duration: const Duration(seconds: 2), duration: const Duration(seconds: 2),
vsync: this, vsync: this,
)..repeat(reverse: true); )..repeat(reverse: true);
_scanAnimation = Tween<double>(begin: 0.8, end: 1.0).animate(
CurvedAnimation(parent: _scanAnimationController, curve: Curves.easeInOut),
);
} }
@override @override
@@ -190,7 +181,6 @@ class _CaptureScreenState extends State<CaptureScreen>
if (_cameraController != null) { if (_cameraController != null) {
await _cameraController!.dispose(); await _cameraController!.dispose();
_cameraController = null; _cameraController = null;
_isCameraInitialized = false;
} }
_cameras = await availableCameras(); _cameras = await availableCameras();
@@ -211,9 +201,7 @@ class _CaptureScreenState extends State<CaptureScreen>
await _cameraController!.initialize(); await _cameraController!.initialize();
setState(() { setState(() {
_isCameraInitialized = true;
_showLiveCamera = true; _showLiveCamera = true;
_alignmentStatus = null;
_targetResult = null; // reset détection cible _targetResult = null; // reset détection cible
_parallelismData = null; // NOUVEAU : reset IMU _parallelismData = null; // NOUVEAU : reset IMU
}); });
@@ -269,16 +257,6 @@ class _CaptureScreenState extends State<CaptureScreen>
setState(() { setState(() {
// On garde le résultat complet pour dessiner le cercle. // On garde le résultat complet pour dessiner le cercle.
_targetResult = result.success ? result : null; _targetResult = result.success ? result : null;
if (!result.success) {
_alignmentStatus = null;
} else {
final bool isCentered =
result.centerX > 0.25 && result.centerX < 0.75 &&
result.centerY > 0.25 && result.centerY < 0.75;
final bool isSizedCorrectly = result.radius > 0.15;
_alignmentStatus = isCentered && isSizedCorrectly;
}
}); });
} }
} catch (e) { } catch (e) {
@@ -298,7 +276,6 @@ class _CaptureScreenState extends State<CaptureScreen>
_cameraController!.stopImageStream(); _cameraController!.stopImageStream();
} }
} catch (_) {} } catch (_) {}
_alignmentStatus = null;
_targetResult = null; _targetResult = null;
} }

View File

@@ -345,21 +345,6 @@ class _CropScreenState extends State<CropScreen> {
void _initializeImagePosition() { void _initializeImagePosition() {
if (_imageSize == null) return; if (_imageSize == null) return;
final imageAspect = _imageSize!.width / _imageSize!.height;
final viewportAspect = _viewportSize.width / _viewportSize.height;
// 1. Calcul strict de la taille de l'image affichée en BoxFit.contain
double displayWidth, displayHeight;
if (imageAspect > viewportAspect) {
displayWidth = _viewportSize.width;
displayHeight = _viewportSize.width / imageAspect;
} else {
displayHeight = _viewportSize.height;
displayWidth = _viewportSize.height * imageAspect;
}
final minDisplayDim = math.min(displayWidth, displayHeight);
// 2. Calcul du scale initial basé sur la dimension de l'image (et non du viewport) // 2. Calcul du scale initial basé sur la dimension de l'image (et non du viewport)
_scale = widget.initialScale ?? 1.0; _scale = widget.initialScale ?? 1.0;
if (_scale < 1.0 && widget.initialScale == null) _scale = 1.0; if (_scale < 1.0 && widget.initialScale == null) _scale = 1.0;

View File

@@ -1,7 +1,5 @@
import 'package:flutter/foundation.dart'; import 'package:flutter/foundation.dart';
import '../../data/models/session.dart';
import '../../data/models/target_analysis.dart'; import '../../data/models/target_analysis.dart';
import '../../data/models/weapon.dart';
class SessionProvider extends ChangeNotifier { class SessionProvider extends ChangeNotifier {
DateTime? _sessionDate; DateTime? _sessionDate;

View File

@@ -85,8 +85,6 @@ class _SettingsScreenState extends State<SettingsScreen> {
} }
void _showThemeDialog() { void _showThemeDialog() {
final themeProvider = context.read<ThemeProvider>();
showDialog( showDialog(
context: context, context: context,
builder: (context) => AlertDialog( builder: (context) => AlertDialog(

View File

@@ -119,7 +119,6 @@ class ParallelismService {
// Normalisation par la magnitude réelle (indépendant de g exact) // Normalisation par la magnitude réelle (indépendant de g exact)
final double nx = gx / magnitude; final double nx = gx / magnitude;
final double ny = gy / magnitude;
final double nz = gz / magnitude; final double nz = gz / magnitude;
// Pitch et Roll mesurent l'inclinaison autour de chaque axe. // Pitch et Roll mesurent l'inclinaison autour de chaque axe.