init method

Future<void> init()

Initialize the audio player and restore last reciter.

Implementation

Future<void> init() async {
  _player ??= AudioPlayer();
  final saved = await storage.getInt('quran_audio_reciter');
  if (saved != null && saved >= 0 && saved < reciters.length) {
    _reciterIndex = saved;
  }
  final savedQuality = await storage.getString('quran_audio_quality');
  if (savedQuality != null) {
    _quality = AudioQuality.values.firstWhere(
      (q) => q.key == savedQuality,
      orElse: () => AudioQuality.medium,
    );
  }

  _player!.playerStateStream.listen((s) {
    state.value = state.value.copyWith(
      isPlaying: s.playing,
      isLoading: s.processingState == ProcessingState.loading ||
          s.processingState == ProcessingState.buffering,
    );

    if (s.processingState == ProcessingState.completed) {
      _autoAdvance();
    }
  });

  _player!.positionStream.listen((pos) {
    state.value = state.value.copyWith(position: pos);
  });

  _player!.durationStream.listen((dur) {
    if (dur != null) {
      state.value = state.value.copyWith(duration: dur);
    }
  });
}