playAyahWords method

Future<void> playAyahWords({
  1. required int surahNumber,
  2. required int ayahNumber,
  3. int? totalWords,
})

تشغيل كل كلمات آية بالتسلسل.

Implementation

Future<void> playAyahWords({
  required int surahNumber,
  required int ayahNumber,
  int? totalWords,
}) async {
  if (!isInitialized) return;

  final isConnected = InternetConnectionController.instance.isConnected;

  if (isConnected) {
    try {
      await stop();

      isLoading.value = true;
      currentPlayingRef.value = WordRef(
        surahNumber: surahNumber,
        ayahNumber: ayahNumber,
        wordNumber: 0, // يشير إلى كل الآية
      );
      isPlayingAyahWords.value = true;

      final wordCount =
          totalWords ?? getAyahWordCount(surahNumber, ayahNumber);
      if (wordCount <= 0) {
        isLoading.value = false;
        isPlaying.value = false;
        currentPlayingRef.value = null;
        isPlayingAyahWords.value = false;
        return;
      }

      final sources = List<AudioSource>.generate(
        wordCount,
        (i) => AudioSource.uri(
          Uri.parse(_buildWordUrl(
            surahNumber: surahNumber,
            ayahNumber: ayahNumber,
            wordNumber: i + 1,
          )),
        ),
      );
      await _audioPlayer.setAudioSources(sources);

      isLoading.value = false;
      isPlaying.value = true;

      _listenForCompletion();
      await _audioPlayer.play();
    } catch (e) {
      log('WordAudioService.playAyahWords error: $e',
          name: 'WordAudioService');
      isLoading.value = false;
      isPlaying.value = false;
      currentPlayingRef.value = null;
      isPlayingAyahWords.value = false;
    }
  } else {
    ToastUtils().showToast(
      Get.context!,
      'لا يوجد اتصال بالإنترنت',
    );
  }
}