merge(develop): integre lot UI WIP sans validation QA, sur demande explicite (#176 #177)

This commit is contained in:
2026-07-29 12:41:59 +02:00
15 changed files with 136 additions and 97 deletions

View File

@ -2900,6 +2900,17 @@ final class _CurrentStepPane extends StatelessWidget {
),
],
const SizedBox(height: 4),
if (step.type == ExerciseStepType.reps) ...[
FilledButton.icon(
onPressed: onCompleteStep,
style: FilledButton.styleFrom(
minimumSize: const Size.fromHeight(48),
),
icon: const Icon(Icons.check),
label: const Text('Étape suivante'),
),
const SizedBox(height: 8),
],
Row(
children: [
Expanded(
@ -2933,19 +2944,6 @@ final class _CurrentStepPane extends StatelessWidget {
),
],
),
if (step.type == ExerciseStepType.reps) ...[
const SizedBox(width: 8),
Expanded(
child: FilledButton.icon(
onPressed: onCompleteStep,
style: FilledButton.styleFrom(
minimumSize: const Size.fromHeight(44),
),
icon: const Icon(Icons.check),
label: const Text('Étape suivante'),
),
),
],
],
),
],
@ -2977,37 +2975,59 @@ final class _TimedStepBody extends StatelessWidget {
children: [
Text('Objectif : ${_formatShortSeconds(step.defaultTargetValue)}'),
const SizedBox(height: 4),
Center(
child: Text(
remainingLabel,
style: Theme.of(context).textTheme.displayMedium?.copyWith(
fontFamily: 'Anton',
fontFeatures: AppTextStyles.timer(context).fontFeatures,
color: Theme.of(context).colorScheme.primary,
),
Expanded(
child: LayoutBuilder(
builder: (context, constraints) {
return FittedBox(
fit: BoxFit.contain,
alignment: Alignment.center,
child: SizedBox(
width: constraints.maxWidth,
child: Column(
mainAxisSize: MainAxisSize.min,
crossAxisAlignment: CrossAxisAlignment.stretch,
children: [
Text(
remainingLabel,
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.displayMedium
?.copyWith(
fontFamily: 'Anton',
fontFeatures: AppTextStyles.timer(
context,
).fontFeatures,
color: Theme.of(context).colorScheme.primary,
),
),
if (!running) ...[
const SizedBox(height: 8),
if (readyToStart) ...[
Text(
'Chrono prêt',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleSmall
?.copyWith(
color: Theme.of(context).colorScheme.primary,
),
),
const SizedBox(height: 4),
],
FilledButton.icon(
onPressed: onStartTimer,
style: FilledButton.styleFrom(
minimumSize: const Size.fromHeight(48),
),
icon: const Icon(Icons.play_arrow),
label: const Text('Lancer'),
),
],
],
),
),
);
},
),
),
if (!running) ...[
const SizedBox(height: 8),
if (readyToStart) ...[
Text(
'Chrono prêt',
textAlign: TextAlign.center,
style: Theme.of(context).textTheme.titleSmall?.copyWith(
color: Theme.of(context).colorScheme.primary,
),
),
const SizedBox(height: 4),
],
FilledButton.icon(
onPressed: onStartTimer,
style: FilledButton.styleFrom(
minimumSize: const Size.fromHeight(48),
),
icon: const Icon(Icons.play_arrow),
label: const Text('Lancer'),
),
],
],
);
}