feat(ui): écran Bibliothèque d'exercices

Ajoute l'écran de bibliothèque d'exercices (presentation/exercise_library_screen.dart)
et ajuste la couche application/domaine (bootstrap, ports, use cases,
entités, repositories Drift) pour l'alimenter. flutter analyze propre,
9/9 tests verts, build APK debug validé.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
2026-07-17 18:42:41 +02:00
parent f474eb500b
commit 318fc6fcb9
10 changed files with 1041 additions and 18 deletions

View File

@ -163,32 +163,46 @@ final class Exercise {
Exercise copyWith({
EntityMetadata? metadata,
String? name,
String? description,
String? imageMediaId,
String? videoMediaId,
Object? description = _unchanged,
Object? imageMediaId = _unchanged,
Object? videoMediaId = _unchanged,
bool? hasTimeMeasure,
bool? hasRepsMeasure,
bool? hasScoreMeasure,
String? scoreLabel,
String? scoreUnit,
DateTime? archivedAt,
Object? scoreLabel = _unchanged,
Object? scoreUnit = _unchanged,
Object? archivedAt = _unchanged,
}) {
return Exercise(
metadata: metadata ?? this.metadata,
name: name ?? this.name,
description: description ?? this.description,
imageMediaId: imageMediaId ?? this.imageMediaId,
videoMediaId: videoMediaId ?? this.videoMediaId,
description: description == _unchanged
? this.description
: description as String?,
imageMediaId: imageMediaId == _unchanged
? this.imageMediaId
: imageMediaId as String?,
videoMediaId: videoMediaId == _unchanged
? this.videoMediaId
: videoMediaId as String?,
hasTimeMeasure: hasTimeMeasure ?? this.hasTimeMeasure,
hasRepsMeasure: hasRepsMeasure ?? this.hasRepsMeasure,
hasScoreMeasure: hasScoreMeasure ?? this.hasScoreMeasure,
scoreLabel: scoreLabel ?? this.scoreLabel,
scoreUnit: scoreUnit ?? this.scoreUnit,
archivedAt: archivedAt ?? this.archivedAt,
scoreLabel: scoreLabel == _unchanged
? this.scoreLabel
: scoreLabel as String?,
scoreUnit: scoreUnit == _unchanged
? this.scoreUnit
: scoreUnit as String?,
archivedAt: archivedAt == _unchanged
? this.archivedAt
: archivedAt as DateTime?,
);
}
}
const Object _unchanged = Object();
final class Program {
Program({
required this.metadata,