簡體   English   中英

如何從 TabBar 內的音頻中避免 PlayerInterruptedException(連接中止)?

[英]How to avoid PlayerInterruptedException (Connection aborted) from just audio inside TabBar?

我正在使用just_audio: ^0.9.29來播放音頻。 該頁面包含TabBar()Two Tabs 播放器位於第一個選項卡內。

音頻播放器代碼:

    GestureDetector(
    onTap: () => taskerProfileViewModel.playAudio(),
    child: CircleAvatar(
      backgroundColor: kBlack,
      child: taskerProfileViewModel.isPlaying.value
          ? const Icon(
              Icons.pause,
              color: kWhite,
            )
          : const Icon(
              Icons.play_arrow,
              color: kWhite,
            ),
    ),
  );

void setAudioUrl({required String url}) async {
    audioPlayer.setUrl("$baseUrl/$url", initialPosition: Duration.zero);
    Duration? audioDuration;
    try {
      audioDuration = await audioPlayer.load();
    } on PlayerInterruptedException catch (e) {
      if (kDebugMode) {
        print("Exception $e");
      }
    }
    if (audioDuration != null) {
      audioEndTime.value =
          "${audioDuration.inMinutes.remainder(60).toString().padLeft(2, "0")}:${audioDuration.inSeconds.remainder(60).toString().padLeft(2, "0")}";
    }
  }

我在 initstate 中調用setAudioUrl() initstate

當我交換標簽時沒有問題。 但是,當我點擊選項卡時,音頻播放器拋出此異常PlayerInterruptedException (Connection aborted)

我如何捕獲並忽略此異常?

setUrl應該在try catch塊內,它是一個異步方法,所以它需要一個await關鍵字,試試這段代碼:

    void setAudioUrl({required String url}) async {
    Duration? audioDuration;
    try {
    await audioPlayer.setUrl("$baseUrl/$url", initialPosition: Duration.zero);
    audioDuration = await audioPlayer.load();
    } on PlayerInterruptedException catch (e) {
      if (kDebugMode) {
        print("Exception $e");
      }
    }
    if (audioDuration != null) {
      audioEndTime.value =
          "${audioDuration.inMinutes.remainder(60).toString().padLeft(2, "0")}:${audioDuration.inSeconds.remainder(60).toString().padLeft(2, "0")}";
    }
  }

希望能幫助到你。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM