import 'package:audioplayers/audioplayers.dart'; abstract interface class ExerciseStepAudioCuePlayer { Future playShortCountdownBeep(); Future playLongCompletionBeep(); Future dispose(); } final class AudioplayersExerciseStepAudioCuePlayer implements ExerciseStepAudioCuePlayer { AudioplayersExerciseStepAudioCuePlayer(); final AudioPlayer _player = AudioPlayer(); @override Future playShortCountdownBeep() { return _play('audio/step_countdown_short.wav'); } @override Future playLongCompletionBeep() { return _play('audio/step_completion_long.wav'); } Future _play(String assetPath) async { await _player.stop(); await _player.play(AssetSource(assetPath)); } @override Future dispose() { return _player.dispose(); } } final class NoOpExerciseStepAudioCuePlayer implements ExerciseStepAudioCuePlayer { const NoOpExerciseStepAudioCuePlayer(); @override Future playShortCountdownBeep() async {} @override Future playLongCompletionBeep() async {} @override Future dispose() async {} }