Browse Source

fix: audios in app

pull/46/head
AmirrezaChegini 7 days ago
parent
commit
d85c7e3b64
  1. 4
      lib/core/constants/my_constants.dart
  2. 9
      lib/core/services/audio_service.dart
  3. 6
      lib/features/home/presentation/bloc/home_bloc.dart
  4. 5
      lib/features/level/presentation/bloc/level_bloc.dart
  5. 17
      lib/features/question/presentation/bloc/question_bloc.dart
  6. 2
      lib/init_bindings.dart

4
lib/core/constants/my_constants.dart

@ -24,7 +24,9 @@ class MyConstants {
static const String firstShowcase = 'FIRST_SHOWCASE';
/// Other
static const double mainAudioVolume = 0.3;
static const double questionAudioVolume = 1.0;
static const double musicAudioVolume = 0.3;
static const double effectAudioVolume = 0.2;
static const String defaultLanguage = 'en';
static const List<LanguageEntity> languages = [
LanguageEntity(title: 'English (English)', code: 'en', locale: Locale('en','US')),

9
lib/core/services/audio_service.dart

@ -6,11 +6,8 @@ import 'package:just_audio/just_audio.dart';
class AudioService {
final AudioPlayer _player = AudioPlayer();
final StreamController<bool> _streamController = StreamController.broadcast();
final double? volume;
AudioService({this.volume}) {
_player.setVolume(volume ?? 1);
}
AudioService();
Future<Duration?> setAudio({String? filePath, String? assetPath}) async {
try {
@ -72,10 +69,10 @@ class AudioService {
}
}
Future<void> changeMute() async {
Future<void> changeMute({required double volume}) async {
try {
if (_player.volume == 0) {
await _player.setVolume(volume ?? 1);
await _player.setVolume(volume);
} else {
await _player.setVolume(0);
}

6
lib/features/home/presentation/bloc/home_bloc.dart

@ -59,15 +59,17 @@ class HomeBloc extends Bloc<HomeEvent, HomeState> {
Future<void> changeMute() async {
await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
]);
}
Future<void> playMusic() async {
await Future.wait([
_mainAudioService.setAudio(assetPath: MyAudios.home),
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume),
_mainAudioService.setLoopMode(isLoop: true),
_effectAudioService.setVolume(volume: MyConstants.effectAudioVolume),
]);
await _mainAudioService.play();
}

5
lib/features/level/presentation/bloc/level_bloc.dart

@ -189,6 +189,7 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
Future<void> playMusic() async {
await Future.wait([
_mainAudioService.setAudio(assetPath: MyAudios.question),
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume),
_mainAudioService.setLoopMode(isLoop: true),
]);
await _mainAudioService.play();
@ -223,8 +224,8 @@ class LevelBloc extends Bloc<LevelEvent, LevelState> {
Future<void> changeMute() async {
await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
_mainAudioService.changeMute(volume: MyConstants.musicAudioVolume),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
]);
}

17
lib/features/question/presentation/bloc/question_bloc.dart

@ -33,7 +33,7 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
) : super(QuestionState()) {
volumeStream = _mainAudioService.volumeStream();
playingStream = _mainAudioService.playingStream();
stopMusic();
initAudios();
registerShowCase();
on<GetLevelEvent>(_getLevelEvent);
on<ChooseAnswerEvent>(_chooseAnswerEvent);
@ -42,6 +42,8 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
@override
Future<void> close() {
unRegisterShowCase();
_mainAudioService.setVolume(volume: MyConstants.musicAudioVolume);
_backgroundAudioService.dispose();
animationController.dispose();
return super.close();
}
@ -69,6 +71,7 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
/// ------------Controllers------------
final AudioService _mainAudioService;
final AudioService _backgroundAudioService = AudioService();
final AudioService _effectAudioService;
late final AnimationController animationController;
@ -124,11 +127,16 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
await _effectAudioService.play();
}
Future<void> stopMusic() async {
Future<void> initAudios() async {
await Future.wait([
_mainAudioService.stop(),
_mainAudioService.setVolume(volume: MyConstants.questionAudioVolume),
_mainAudioService.setLoopMode(isLoop: false),
_backgroundAudioService.setAudio(assetPath: MyAudios.question),
_backgroundAudioService.setVolume(volume: 0.1),
_backgroundAudioService.setLoopMode(isLoop: true),
]);
await _backgroundAudioService.play();
}
Future<void> playWrongAudio() async {
@ -148,8 +156,9 @@ class QuestionBloc extends Bloc<QuestionEvent, QuestionState> {
Future<void> changeMute() async {
await Future.wait([
_mainAudioService.changeMute(),
_effectAudioService.changeMute(),
_mainAudioService.changeMute(volume: MyConstants.questionAudioVolume),
_backgroundAudioService.changeMute(volume: 0.1),
_effectAudioService.changeMute(volume: MyConstants.effectAudioVolume),
]);
}

2
lib/init_bindings.dart

@ -41,7 +41,7 @@ void initBindings() {
/// Classes
locator.registerSingleton<IHttpRequest>(HttpRequestImpl());
locator.registerSingleton<AudioService>(
AudioService(volume: MyConstants.mainAudioVolume),
AudioService(),
instanceName: MyConstants.mainAudioService,
);
locator.registerSingleton<AudioService>(

Loading…
Cancel
Save