import 'package:just_audio/just_audio.dart'; abstract class AudioService { Future playTone({required String path, bool isMute = false}); Future listenAudioPlayerEvents({required Function() onAudioCompleted}); Future disposeAudioPlayer(); } class AudioServiceImp implements AudioService { AudioPlayer audioPlayerInstance; AudioServiceImp({required this.audioPlayerInstance}); @override Future listenAudioPlayerEvents({required Function() onAudioCompleted}) async { audioPlayerInstance.playerStateStream.listen((playerState) async { if (playerState.processingState == ProcessingState.completed) { onAudioCompleted(); } }); } @override Future playTone({required String path, bool isMute = false}) async { audioPlayerInstance.setAsset(path); if (isMute) { audioPlayerInstance.setVolume(0.0); } await audioPlayerInstance.play(); } @override Future disposeAudioPlayer() async { await audioPlayerInstance.dispose(); } }