justAudio используется очень просто, что создает исключение.

Вопрос или проблема

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

Произошло исключение.
_TypeError (тип ‘Null’ не является подтипом типа ‘MediaItem’ при приведении типа)

на этой строке:

await musicPlayer.setAudioSource(AudioSource.uri(Uri.parse(url)));

Вот функция, которая завершилась неудачно на этой строке:

Future<void> playBackgroundMusic() async {
    int rng = Random().nextInt(7);
    // Сообщаем операционной системе о наших аудио атрибутах и т.д.
    // Мы выбираем разумное значение по умолчанию для приложения, которое воспроизводит речь.
    final session = await AudioSession.instance;
    await session.configure(const AudioSessionConfiguration.speech());
    String musicFilename = filenameList[rng];
    String url =
        "MY_SERVER/music/$musicFilename";
    final musicPlayer = AudioPlayer();
    try {
          await musicPlayer.setAudioSource(AudioSource.uri(Uri.parse(url)));
    } on PlayerException catch (e) {
      print("Ошибка при загрузке аудио источника: $e");
    }
    musicPlayer.play();
  }

Эта функция вызывается в первом initState приложения:

  @override
  void initState() {
    super.initState();
    playBackgroundMusic();
  }

Похожий вопрос 78571039 был задан, и ответом было импортировать Audio Service и добавить этот код:

AudioSource.uri( Uri.parse(item.music), tag: MediaItem( id: "${item.id}", album: "${musicImage}", title: "${item.name}", artUri: Uri.parse('${musicImage}'), ), ),

Это решило мою проблему – но я бы никогда не узнал об этом из документации Just Audio. Я думаю, что это указывает на то, что что-то (документация) или код нуждается в изменении в Just Audio. Эта проблема не была решена на GitHub в сентябре 2023 года из-за недостатка конкретики. https://github.com/ryanheise/just_audio/issues/991.

Поэтому я прошу либо указать на существующую документацию, которая говорит о том, что этот импорт и строка кода обязательны, либо обновить документацию. Это слишком хороший плагин, чтобы что-то мешало людям его использовать.

Ответ или решение

Уважаемый пользователь,

Спасибо за ваш вопрос и за то, что поделились вашим кодом и возникшей ошибкой. Давайте разберемся с возникшей проблемой и найдем решение.

Ошибка, которую вы получаете:

_TypeError (type 'Null' is not a subtype of type 'MediaItem' in type cast)

указывает на то, что вы пытаетесь установить аудиоресурс без необходимого элемента MediaItem. В библиотеке Just Audio для установки источника аудио требуется создать MediaItem, чтобы библиотека могла правильно обработать ваш запрос.

Как вы уже заметили, необходимо добавить MediaItem к вашему аудиоресурсу. Приведем исправленную версию вашей функции playBackgroundMusic():

Future<void> playBackgroundMusic() async {
  int rng = Random().nextInt(7);

  // Настраиваем аудиосессию
  final session = await AudioSession.instance;
  await session.configure(const AudioSessionConfiguration.speech());

  String musicFilename = filenameList[rng];
  String url = "MY_SERVER/music/$musicFilename";
  final musicPlayer = AudioPlayer();

  try {
    // Создаем MediaItem с необходимыми параметрами
    final mediaItem = MediaItem(
      id: "$rng", // Уникальный идентификатор медиа элемента
      album: "Название альбома", // Укажите название альбома
      title: musicFilename, // Укажите название песни
      artUri: Uri.parse('YOUR_IMAGE_URL'), // Укажите URL обложки
    );

    // Устанавливаем аудиоресурс, включая MediaItem
    await musicPlayer.setAudioSource(
      AudioSource.uri(
        Uri.parse(url),
        tag: mediaItem, // Передаем MediaItem здесь
      ),
    );

    // Запускаем воспроизведение
    musicPlayer.play();
  } on PlayerException catch (e) {
    print("Ошибка при загрузке аудиоресурса: $e");
  }
}

Обратите внимание на ключевые моменты:

  1. Мы создаем MediaItem перед установкой источника аудио.
  2. Убедитесь, что все параметры, такие как id, album, title, и artUri, указаны правильно. Это важно для корректной работы плеера.

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

Если у вас есть дополнительные вопросы или потребуется дальнейшая помощь, не стесняйтесь обращаться.

С уважением,
[Ваше Имя]

Оцените материал
Добавить комментарий

Капча загружается...