feat(ui): réglages auto-enchaînement exercice, programme et séance (ticket #77)
Ajoute les réglages d'auto-enchaînement des chronos d'étapes sur exercise_library_screen.dart, program_screen.dart et workout_template_screen.dart, s'appuyant sur la résolution du ticket #76. Propagation du nouveau champ vérifiée exhaustivement sur les 5 points d'impact de _ProgramExerciseDraft (constructeur, fromExercise, fromProgramExercise, copy(), toConfig()) — pas de répétition du bug #72. flutter pub get OK, dart format appliqué (7 fichiers reformatés), analyze propre (mêmes infos préexistantes), 152/152 tests verts, build APK debug validé. Développés dans le même worktree partagé par DevBackend et DevFrontend ; feature/step-chaining-77-ui-settings restée vide, jamais divergée. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -404,6 +404,7 @@ final class _ExerciseFormScreenState extends State<ExerciseFormScreen> {
|
||||
var _importingImage = false;
|
||||
var _importingVideo = false;
|
||||
var _stepsEnabled = false;
|
||||
var _autoStartNextTimedStep = true;
|
||||
var _nextStepDraftId = 0;
|
||||
final _stepDrafts = <_ExerciseStepDraft>[];
|
||||
String? _measureError;
|
||||
@ -442,6 +443,7 @@ final class _ExerciseFormScreenState extends State<ExerciseFormScreen> {
|
||||
_hasScore = exercise?.hasScoreMeasure ?? false;
|
||||
_scoreInputMode = exercise?.scoreInputMode ?? ScoreInputMode.manual;
|
||||
_stepsEnabled = exercise?.steps.isNotEmpty ?? false;
|
||||
_autoStartNextTimedStep = exercise?.autoStartNextTimedStep ?? true;
|
||||
for (final step in exercise?.steps ?? const <ExerciseStep>[]) {
|
||||
_stepDrafts.add(_draftFromStep(step));
|
||||
}
|
||||
@ -742,6 +744,25 @@ final class _ExerciseFormScreenState extends State<ExerciseFormScreen> {
|
||||
},
|
||||
),
|
||||
if (_stepsEnabled) ...[
|
||||
const SizedBox(height: 8),
|
||||
SwitchListTile(
|
||||
contentPadding: EdgeInsets.zero,
|
||||
title: const Text(
|
||||
'Enchaîner automatiquement les chronos consécutifs',
|
||||
),
|
||||
subtitle: Text(
|
||||
_autoStartNextTimedStep
|
||||
? 'Le chrono suivant démarre dès que le précédent arrive à 0.'
|
||||
: "L'app attendra ton démarrage avant de lancer le chrono "
|
||||
'suivant.',
|
||||
),
|
||||
value: _autoStartNextTimedStep,
|
||||
onChanged: (value) {
|
||||
setState(() {
|
||||
_autoStartNextTimedStep = value;
|
||||
});
|
||||
},
|
||||
),
|
||||
const SizedBox(height: 8),
|
||||
ReorderableListView.builder(
|
||||
shrinkWrap: true,
|
||||
@ -1312,6 +1333,7 @@ final class _ExerciseFormScreenState extends State<ExerciseFormScreen> {
|
||||
defaultTargetReps: defaultTargetReps,
|
||||
defaultTargetScore: defaultTargetScore,
|
||||
defaultTargetScoreTimeMs: defaultTargetScoreTimeMs,
|
||||
autoStartNextTimedStep: _autoStartNextTimedStep,
|
||||
steps: steps,
|
||||
);
|
||||
} else {
|
||||
@ -1332,6 +1354,7 @@ final class _ExerciseFormScreenState extends State<ExerciseFormScreen> {
|
||||
defaultTargetReps: defaultTargetReps,
|
||||
defaultTargetScore: defaultTargetScore,
|
||||
defaultTargetScoreTimeMs: defaultTargetScoreTimeMs,
|
||||
autoStartNextTimedStep: _autoStartNextTimedStep,
|
||||
steps: steps,
|
||||
);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user