play method

Future<void> play()

Implementation

Future<void> play() async {
  // Checking if the file is not already playing
  if (isPlaying) {
    return;
  }

  // Updating playing state
  isPlaying = true;
  updateUI();

  try {
    var completer = Completer<void>();

    // Getting file extension
    logger.info('Preparing to play $audioPath');

    var player = getPlayer();
    _currentPlayer = player;

    // Registering for audio progress updates
    Timer.periodic(const Duration(milliseconds: 200), (t) {
      var state = player.state;
      if (state != PlayerState.playing) {
        logger.debug('Flaging audio as finished');
        isPlaying = false;
        completer.complete();
        secondsPlayed = 0;
        t.cancel();
        updateUI();
        return;
      }
      // logger.info('Audio progress ($state): ${player.currentPosition}');
      secondsPlayed = player.positionInSeconds;
      updateUI();
    });

    // Play
    player.play();
    logger.debug('Finished playing');

    return completer.future;
  } finally {
    updateUI();
  }
}