Ajoute l'adapter API distant (infrastructure/remote/auth_api.dart, http_api_client.dart) et le stockage sécurisé du token d'auth (infrastructure/security/secure_storage_auth_token_store.dart), câblés dans app_bootstrap.dart. Étend le modèle Drift (migration schemaVersion 9→10) et la couche application (ports, use cases, entités) pour la session de compte. flutter pub get OK (ajout http, flutter_secure_storage), build_runner OK, dart format appliqué, analyze propre (mêmes infos préexistantes), 109/109 tests verts, build APK debug validé. Premier ticket du chantier "Ajouter les features serveur au client" (#63). Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
51 lines
1.1 KiB
Dart
51 lines
1.1 KiB
Dart
import 'package:audioplayers/audioplayers.dart';
|
|
|
|
abstract interface class ExerciseStepAudioCuePlayer {
|
|
Future<void> playShortCountdownBeep();
|
|
|
|
Future<void> playLongCompletionBeep();
|
|
|
|
Future<void> dispose();
|
|
}
|
|
|
|
final class AudioplayersExerciseStepAudioCuePlayer
|
|
implements ExerciseStepAudioCuePlayer {
|
|
AudioplayersExerciseStepAudioCuePlayer();
|
|
|
|
final AudioPlayer _player = AudioPlayer();
|
|
|
|
@override
|
|
Future<void> playShortCountdownBeep() {
|
|
return _play('audio/step_countdown_short.wav');
|
|
}
|
|
|
|
@override
|
|
Future<void> playLongCompletionBeep() {
|
|
return _play('audio/step_completion_long.wav');
|
|
}
|
|
|
|
Future<void> _play(String assetPath) async {
|
|
await _player.stop();
|
|
await _player.play(AssetSource(assetPath));
|
|
}
|
|
|
|
@override
|
|
Future<void> dispose() {
|
|
return _player.dispose();
|
|
}
|
|
}
|
|
|
|
final class NoOpExerciseStepAudioCuePlayer
|
|
implements ExerciseStepAudioCuePlayer {
|
|
const NoOpExerciseStepAudioCuePlayer();
|
|
|
|
@override
|
|
Future<void> playShortCountdownBeep() async {}
|
|
|
|
@override
|
|
Future<void> playLongCompletionBeep() async {}
|
|
|
|
@override
|
|
Future<void> dispose() async {}
|
|
}
|