65 lines
1.9 KiB
Dart
65 lines
1.9 KiB
Dart
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<void> 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<void> 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<void> playHapticFeedback() async {
|
|
try {
|
|
await HapticFeedback.mediumImpact();
|
|
} catch (e) {
|
|
DebugLog.error('[AudioFeedbackService] Error playing haptic feedback', e);
|
|
}
|
|
}
|
|
|
|
/// Jouer un feedback complet (son + vibration)
|
|
static Future<void> playFullFeedback({bool isSuccess = true}) async {
|
|
if (isSuccess) {
|
|
await playSuccessBeep();
|
|
} else {
|
|
await playErrorBeep();
|
|
}
|
|
}
|
|
|
|
/// Nettoyer les ressources
|
|
static Future<void> dispose() async {
|
|
await _player.dispose();
|
|
}
|
|
}
|