Флаттер фоновый звук с индикатором выполнения

Я хочу воспроизвести звук из потока. Я использовал для этого Just Audio . Я хочу, чтобы индикатор выполнения, такой как индикатор выполнения аудио-видео, также воспроизводил звук в фоновом режиме с помощью Audio Service .

Я использовал примеры для всех из них, и они работают индивидуально, но я не могу их объединить. Не могли бы вы помочь с примером того, как я могу это сделать?

1 ответ

Пример из audio_service плагин содержит , как использовать audio_service вместе с just_audio. (объединение 2 пакетов сделано)

Ниже указано, что дано в примере плагина audio_service.

      // A seek bar.
StreamBuilder<MediaState>(
    stream: _mediaStateStream,
    builder: (context, snapshot) {
        final mediaState = snapshot.data;
        return SeekBar(
            duration:
                mediaState?.mediaItem?.duration ?? Duration.zero,
            position: mediaState?.position ?? Duration.zero,
            onChangeEnd: (newPosition) {
                AudioService.seekTo(newPosition);
            },
        );
    },
),
...

class SeekBar extends StatefulWidget {
  final Duration duration;
  final Duration position;
  final ValueChanged<Duration>? onChanged;
  final ValueChanged<Duration>? onChangeEnd;

  SeekBar({
    required this.duration,
    required this.position,
    this.onChanged,
    this.onChangeEnd,
  });

  @override
  _SeekBarState createState() => _SeekBarState();
}

// more code in the plugin example

Теперь из приведенного выше кода, как вы можете видеть, в примере используется нестандартный дизайн (в котором используется слайдер ).

Вместо настраиваемого слайдера вы можете использовать желаемый виджет плагина. в твоем случае.

      StreamBuilder<MediaState>(
    stream: _mediaStateStream,
    builder: (context, snapshot) {
        final mediaState = snapshot.data;
        return ProgressBar(
            total:
                mediaState?.mediaItem?.duration ?? Duration.zero,
            progress: mediaState?.position ?? Duration.zero,
            onSeek: (newPosition) {
                AudioService.seekTo(newPosition);
            },
        );
    },
),

Это изменение для вышеуказанного SeekBar с участием ProgressBar. (Объединение 3-го пакета сделано)

Примечание: для buffered. Вы можете получить bufferedPosition из audio_service PlaybackStateStream.

Другие вопросы по тегам