feat(ui): identité visuelle Court Blazer sur toute l'app (ticket #17)
Ajoute le thème centralisé (presentation/theme.dart) basé sur les polices Anton/Archivo et l'applique à tous les écrans (accueil, bibliothèque d'exercices, programme, séance-modèle, exécution de séance, historique). flutter analyze propre, 27/27 tests verts, build APK debug validé. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@ -6,6 +6,7 @@ import 'package:flutter/material.dart';
|
||||
import '../application/application.dart';
|
||||
import '../domain/domain.dart';
|
||||
import 'history_screen.dart';
|
||||
import 'theme.dart';
|
||||
|
||||
enum WorkoutExecutionMode { active, rest, paused, finished }
|
||||
|
||||
@ -146,7 +147,7 @@ final class _WorkoutExecutionScreenState extends State<WorkoutExecutionScreen> {
|
||||
Center(
|
||||
child: Text(
|
||||
_formatDuration(Duration(seconds: _remainingRestSeconds)),
|
||||
style: Theme.of(context).textTheme.displayLarge,
|
||||
style: AppTextStyles.timer(context),
|
||||
),
|
||||
),
|
||||
if (next != null && nextExercise != null) ...[
|
||||
@ -533,7 +534,7 @@ final class SetMeasureInput extends StatelessWidget {
|
||||
exercise.targetTimeSeconds == null
|
||||
? 'Chronométrer'
|
||||
: '${exercise.targetTimeSeconds} s',
|
||||
style: Theme.of(context).textTheme.displaySmall,
|
||||
style: AppTextStyles.scoreNumber(context),
|
||||
),
|
||||
],
|
||||
),
|
||||
@ -549,7 +550,7 @@ final class SetMeasureInput extends StatelessWidget {
|
||||
onRepsChanged((reps - 1).clamp(0, 999).toInt()),
|
||||
icon: const Icon(Icons.remove),
|
||||
),
|
||||
Text('$reps'),
|
||||
Text('$reps', style: AppTextStyles.scoreNumber(context)),
|
||||
IconButton(
|
||||
onPressed: () => onRepsChanged(reps + 1),
|
||||
icon: const Icon(Icons.add),
|
||||
@ -561,11 +562,11 @@ final class SetMeasureInput extends StatelessWidget {
|
||||
const SizedBox(height: 12),
|
||||
TextField(
|
||||
controller: scoreController,
|
||||
style: AppTextStyles.scoreNumber(context),
|
||||
decoration: InputDecoration(
|
||||
labelText: exercise.scoreUnit == null
|
||||
? 'Score'
|
||||
: 'Score (${exercise.scoreUnit})',
|
||||
border: const OutlineInputBorder(),
|
||||
),
|
||||
keyboardType: TextInputType.number,
|
||||
),
|
||||
@ -770,13 +771,16 @@ final class _Header extends StatelessWidget {
|
||||
|
||||
@override
|
||||
Widget build(BuildContext context) {
|
||||
return Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(elapsedLabel, style: Theme.of(context).textTheme.headlineSmall),
|
||||
const SizedBox(height: 4),
|
||||
Text(progressLabel),
|
||||
],
|
||||
return CourtBlazerAccentPanel(
|
||||
padding: const EdgeInsets.all(14),
|
||||
child: Column(
|
||||
crossAxisAlignment: CrossAxisAlignment.start,
|
||||
children: [
|
||||
Text(elapsedLabel, style: AppTextStyles.scoreNumber(context)),
|
||||
const SizedBox(height: 4),
|
||||
Text(progressLabel),
|
||||
],
|
||||
),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user