颤振| audioplayers onDurationChanged 方法不适用于 IOS

时间:2021-05-09 06:06:06

标签: flutter dart

我正在尝试制作某种 mp3 播放器应用程序,并且我正在使用 audioplayers 包。它在 Android 上运行良好,但在 IOS 上似乎没有调用 onDurationChanged。 而且由于我还显示了一个滑块,它在 IOS 上给出了一个错误,因为 max 值返回 null

这是我的代码

class AudioProvider extends ChangeNotifier {
  AudioProvider() {
    initAudio();
  }
  AudioPlayer _audioPlayer = AudioPlayer();

  Duration totalDuration;
  Duration position;
  String audioState;

  initAudio() {
    _audioPlayer.onDurationChanged.listen((updatedDuration) {
      totalDuration = updatedDuration; // This doesn't work on IOS, totalDuration == null
      notifyListeners();
    });

    _audioPlayer.onAudioPositionChanged.listen((updatedPosition) {
      position = updatedPosition;
      notifyListeners();
    });

    _audioPlayer.onPlayerStateChanged.listen((playerState) {
      if (playerState == AudioPlayerState.STOPPED) audioState = "Stopped";
      if (playerState == AudioPlayerState.PLAYING) audioState = "Playing";
      if (playerState == AudioPlayerState.PAUSED) audioState = "Paused";
      notifyListeners();
    });
  }

  playPauseAudio(String url, bool alreadyPlaying) async {
    if (!alreadyPlaying) {
      position = null;
      totalDuration = null;
      await _audioPlayer.play(url);
      notifyListeners();
    }

    if (audioState == 'Playing') {
      await _audioPlayer.pause();
    } else {
      await _audioPlayer.resume();
    }
    notifyListeners();
  }

  void stop() {
    _audioPlayer.stop();
  }

  void seekToSec(Duration durationToSeek) {
    _audioPlayer.seek(durationToSeek);
    notifyListeners();
  }

0 个答案:

没有答案