import 'package:flutter/foundation.dart' show kIsWeb; import 'package:flutter/services.dart'; import 'package:audioplayers/audioplayers.dart'; import 'package:em2rp/utils/debug_log.dart'; /// Service pour émettre des feedbacks sonores lors des interactions class AudioFeedbackService { static final AudioPlayer _player = AudioPlayer(); /// Jouer un son de succès static Future playSuccessBeep() async { try { if (kIsWeb) { // Sur Web, utiliser le chemin absolu await _player.play(UrlSource('assets/sounds/ok.mp3')); } else { // Sur mobile/desktop, utiliser AssetSource await _player.play(AssetSource('sounds/ok.mp3')); } await HapticFeedback.lightImpact(); } catch (e) { DebugLog.error('[AudioFeedbackService] Error playing success beep', e); } } /// Jouer un son d'erreur static Future playErrorBeep() async { try { if (kIsWeb) { // Sur Web, utiliser le chemin absolu await _player.play(UrlSource('assets/sounds/error.mp3')); } else { // Sur mobile/desktop, utiliser AssetSource await _player.play(AssetSource('sounds/error.mp3')); } await HapticFeedback.heavyImpact(); } catch (e) { DebugLog.error('[AudioFeedbackService] Error playing error beep', e); } } /// Jouer une vibration haptique (si disponible) static Future playHapticFeedback() async { try { await HapticFeedback.mediumImpact(); } catch (e) { DebugLog.error('[AudioFeedbackService] Error playing haptic feedback', e); } } /// Jouer un feedback complet (son + vibration) static Future playFullFeedback({bool isSuccess = true}) async { if (isSuccess) { await playSuccessBeep(); } else { await playErrorBeep(); } } /// Nettoyer les ressources static Future dispose() async { await _player.dispose(); } }