Style: Optimisation des curseurs de calibration et bridage des limites

This commit is contained in:
qguillaume
2026-05-26 16:40:14 +02:00
parent 0af6a0d8e2
commit 18c01c3767

View File

@@ -51,7 +51,7 @@ class TargetCalibrationState extends State<TargetCalibration> {
late int _ringCount; late int _ringCount;
late List<double> _ringRadii; late List<double> _ringRadii;
// CORRECTION : Variable dédiée pour piloter la jauge orange sans conflit // Variable dédiée pour piloter la jauge orange sans conflit
late double _currentEspacementRatio; late double _currentEspacementRatio;
bool _isDraggingCenter = false; bool _isDraggingCenter = false;
@@ -71,7 +71,7 @@ class TargetCalibrationState extends State<TargetCalibration> {
_ringCount = widget.initialRingCount; _ringCount = widget.initialRingCount;
// Initialisation du ratio par défaut // Initialisation du ratio par défaut
_currentEspacementRatio = (_radius > 0) ? (_innerRadius / _radius).clamp(0.01, 0.9) : 0.1; _currentEspacementRatio = (_radius > 0) ? (_innerRadius / _radius).clamp(0.01, 0.70) : 0.1;
_initRingRadii(); _initRingRadii();
} }
@@ -108,7 +108,7 @@ class TargetCalibrationState extends State<TargetCalibration> {
} }
if (widget.initialInnerRadius != oldWidget.initialInnerRadius && !_isDraggingInnerRadius) { if (widget.initialInnerRadius != oldWidget.initialInnerRadius && !_isDraggingInnerRadius) {
_innerRadius = widget.initialInnerRadius; _innerRadius = widget.initialInnerRadius;
_currentEspacementRatio = (_radius > 0) ? (_innerRadius / _radius).clamp(0.01, 0.9) : 0.1; _currentEspacementRatio = (_radius > 0) ? (_innerRadius / _radius).clamp(0.01, 0.70) : 0.1;
shouldReinit = true; shouldReinit = true;
} }
if (widget.initialRingRadii != oldWidget.initialRingRadii && widget.initialRingRadii != null) { if (widget.initialRingRadii != oldWidget.initialRingRadii && widget.initialRingRadii != null) {
@@ -197,6 +197,7 @@ class TargetCalibrationState extends State<TargetCalibration> {
), ),
), ),
// Slider pour la taille (toujours visible)
Container( Container(
padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4), padding: const EdgeInsets.symmetric(horizontal: 16, vertical: 4),
decoration: BoxDecoration( decoration: BoxDecoration(
@@ -209,9 +210,10 @@ class TargetCalibrationState extends State<TargetCalibration> {
const Icon(Icons.zoom_out, color: Colors.white, size: 16), const Icon(Icons.zoom_out, color: Colors.white, size: 16),
Expanded( Expanded(
child: Slider( child: Slider(
value: _radius.clamp(0.5, 1.1), // SÉCURITÉ : Valeur max bridée fermement à 0.82 pour éviter le débordement vertical
value: _radius.clamp(0.5, 0.82),
min: 0.5, min: 0.5,
max: 1.1, max: 0.82,
activeColor: AppTheme.primaryColor, activeColor: AppTheme.primaryColor,
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
@@ -228,6 +230,7 @@ class TargetCalibrationState extends State<TargetCalibration> {
), ),
), ),
// Affichage conditionnel du slider d'espacement orange
if (_showEspacement) ...[ if (_showEspacement) ...[
const SizedBox(height: 8), const SizedBox(height: 8),
Container( Container(
@@ -247,7 +250,8 @@ class TargetCalibrationState extends State<TargetCalibration> {
child: Slider( child: Slider(
value: _currentEspacementRatio, value: _currentEspacementRatio,
min: 0.01, min: 0.01,
max: 0.9, // SÉCURITÉ : Écartement max bridé à 0.70 pour confiner le dernier cercle
max: 0.70,
activeColor: Colors.orange, activeColor: Colors.orange,
onChanged: (value) { onChanged: (value) {
setState(() { setState(() {
@@ -263,13 +267,12 @@ class TargetCalibrationState extends State<TargetCalibration> {
], ],
), ),
), ),
// CORRECTION DU BOUTON RESET : Force visuellement le ratio par défaut // CORRECTION DU BOUTON RESET : Force le ratio d'usine (10%) en dur sans écrasement
// CORRECTION RADICALE : On force le ratio à 0.1 (10% standard) en dur
IconButton( IconButton(
icon: const Icon(Icons.refresh, color: Colors.white70, size: 20), icon: const Icon(Icons.refresh, color: Colors.white70, size: 20),
onPressed: () { onPressed: () {
setState(() { setState(() {
// 1. On force la jauge orange à se remettre pile à 10% (la valeur d'usine) // 1. On force la jauge orange à se remettre à 10%
_currentEspacementRatio = 0.1; _currentEspacementRatio = 0.1;
// 2. On réaligne l'innerRadius sur la taille actuelle // 2. On réaligne l'innerRadius sur la taille actuelle
@@ -278,8 +281,6 @@ class TargetCalibrationState extends State<TargetCalibration> {
// 3. On force la reconstruction des cercles parfaits // 3. On force la reconstruction des cercles parfaits
_initRingRadii(forceRecalculate: true); _initRingRadii(forceRecalculate: true);
}); });
// 4. On balance tout ça au provider pour qu'il s'aligne
_notifyChange(); _notifyChange();
}, },
tooltip: 'Réinitialiser l\'espacement', tooltip: 'Réinitialiser l\'espacement',
@@ -360,7 +361,7 @@ class TargetCalibrationState extends State<TargetCalibration> {
void _onScaleUpdate(ScaleUpdateDetails details, Size size) { void _onScaleUpdate(ScaleUpdateDetails details, Size size) {
setState(() { setState(() {
if (details.pointerCount == 2) { if (details.pointerCount == 2) {
_radius = (_baseRadiusBeforeScale * details.scale).clamp(0.5, 1.1); _radius = (_baseRadiusBeforeScale * details.scale).clamp(0.5, 0.82);
_innerRadius = _radius * _currentEspacementRatio; _innerRadius = _radius * _currentEspacementRatio;
_initRingRadii(forceRecalculate: true); _initRingRadii(forceRecalculate: true);
} else if (_isDraggingCenter) { } else if (_isDraggingCenter) {