1

正在开发音频播放器,我想将单个项目传递给队列,我需要做的是将参数传递给控制器​​,然后从那里我能够将它传递给 page_manager,然后,我能够添加它到队列中,这样做效果很好,但我遇到的问题是,当我注释掉 _loadPlaylist() 和 hot-reload 时,播放器将继续显示加载指示器,但始终显示歌曲名称但音乐将继续加载

message_player 控制器

我在里面调用了下面的方法initState()

addMessageToPlayer({
  required String id,
  required String title,
  required String album,
  required String url,
  required String artUri,
}) {
  final pageManager = getIt<PageManager>();
  pageManager.addMessageToPlayer(
    id: id,
    title: title,
    album: album,
    url: url,
    artUri: artUri,
  );
}

page_manager.dart

在里面Init()我注释掉了_loadPlaylist()因为我不需要它

void init() async {
//    await _loadPlaylist();
    _listenToPlaybackState();
    _listenToCurrentPosition();
    _listenToBufferedPosition();
    _listenToTotalDuration();
    _listenToChangesInSong();
    _listenToChangesInPlaylist();
  }

这是将控制器中的项目添加到队列中的函数

addMessageToPlayer(
      {required String id,
      required String title,
      required String album,
      required String url,
      required String artUri}) {
    // print('ID came ${id}');
    // print('TITLE came ${title}');
    // print('ALBUM came ${album}');
    // print('URL came ${url}');
    // print('ARTURL came ${artUri}');

    final mediaItem = MediaItem(
      id: id,
      title: title,
      album: album,
      extras: {
        'url': url,
        'artUri': artUri,
      },
    );
    _audioHandler.addQueueItem(mediaItem);
  }

注意:如果_loadPlaylist()不注释掉,它会很好用

请问我错过了什么?

4

1 回答 1

1

我能够解决这个问题,我所做的是进入addQueueItem块内并添加player.setAudioSource(_playlist);以将音频播放器设置为最新项目

于 2021-11-03T13:02:32.617 回答