Как использовать Future <AudioCache>? - PullRequest
1 голос
/ 01 июня 2019

Вопрос от новичка Флаттера; D:

Я хочу воспроизвести аудиофайл и иметь возможность установить его громкость или приостановить его.

Функция «loop» возвращает переменнуювведите Future, но в документации (https://github.com/luanpotter/audioplayers/blob/master/doc/audio_cache.md) сказано, что возвращается тип AudioPlayer.

Future<AudioPlayer> audioPlayer = audioCache.loop('background_music.mp3');

должно быть

AudioPlayer audioPlayer = audioCache.loop('background_music.mp3');

Но как мне работать с этой переменной или преобразовать ее вAudioPlayer?

AudioPlayer.pause();

работает, но не Future.pause ();

Мое решение:

    Future<AudioPlayer> audioPlayer = audioCache.loop('background_music.mp3');
  audioPlayer.then((player) {
    player.setVolume(0.2);
  });

1 Ответ

1 голос
/ 01 июня 2019

Концепция

Future s в Dart - это что-то похожее на Promise в мире JS. Фьючерсы показывают, что что-то должно произойти в какой-то момент в будущем. Самое приятное в этом то, что он позволяет Dart не блокировать выполнение программы, пока не будут выполнены вычисления. Это позволяет Dart продолжать работать с другими частями вашего приложения, которые не зависят от обычно медленных вычислений. Например, начало зацикливания аудиофайла.

Чтобы зациклить аудиофайл, вы должны сделать несколько вещей:

  1. загрузить файл из ФС в память
  2. создание экземпляра AudioPlayer
  3. установить некоторые свойства

Из всего этого, чтение файловой системы является относительно медленной операцией, поэтому обернуто в Future. Подробнее о фьючерсах читайте здесь

Но как мне работать с этой переменной или преобразовать ее в AudioPlayer?

  1. await будущее: AudioPlayer loopingPlayer = await audioCache.loop('somefile');
  2. then будущее: audioCache.loop('somefile').then((pl) { /* do work here */ });

работает, но не Future.pause ();

Это потому, что Future (класс), не имеет метода pause(). AudioPlayer делает. Поэтому, чтобы вызвать этот метод, вам нужно дождаться завершения вычислений в Future (в данном случае, вещей, которые я упомянул выше).

...