flutter 我怎样才能获得当前在minipayer中播放的歌曲的详细信息?

hc2pp10m  于 2022-12-19  发布在  Flutter
关注(0)|答案(1)|浏览(87)

我正在flutter中开发一个音乐播放器应用程序,我使用on_audio_query包从设备中获取歌曲,并在listview中显示它们。当我点击一首歌时,我设置所有歌曲的plylist,并使用just_audio包播放点击的歌曲,如下所示。

await player.setAudioSource(
                  ConcatenatingAudioSource(
                    useLazyPreparation: true,
                    shuffleOrder: DefaultShuffleOrder(),
                    children: allSongsList! // allSongsList is the list of 
                     songs(on_audio_query)
                        .map((songModel) =>
                            AudioSource.uri(Uri.parse(songModel.data)))
                        .toList(),
                  ),
                  initialIndex: index, // Listview Index
                  initialPosition: Duration.zero);

                  await item.player.play();

我想在底部显示迷你播放器只有当有一首歌曲播放(暂停),刷新歌曲描述,我如何获得歌曲描述(艺术家/歌曲)?

u1ehiz5o

u1ehiz5o1#

我会让你的迷你播放器小部件的实现为你,但是,我会考虑到我有一个shouldMiniPlayerBeVisible,在Scaffold您的页面:
首先,声明并初始化一个shouldMiniPlayerBeVisible变量,该变量将管理迷你播放器的显示/隐藏:

bool shouldMiniPlayerBeVisible = false;

和一个currentAudio,它将采取的歌曲,并通过它在迷你播放器。

YourAudioModel currentAudio = YourAudioModel();

这里,我假设我有一个简单的YourAudioModel,它将保存音频的信息,如标题、描述、长度、URL(或本地)路径...
我建议最初不要将其设置为null,您可以使用具有一些虚拟数据的占位符YourAudioModel音频模型初始化它,或者加载数据信息,例如...
现在在您的支架上:

Scaffold(
floatingActionButton: Visibility(
  visible: shouldMiniPlayerBeVisible, 
  child: shouldMiniPlayerBeVisible(songToPlay: currentAudio),
  ),
),

我将考虑您使用的是StatefulWidget,但步骤与您需要的相同,只是为了了解它的概念,以便在其他状态管理解决方案中实现它。
initState中,您需要侦听playerStateStream流,如下所示:

player.playerStateStream.listen((state) {
 if (state.playing) {
  shouldMiniPlayerBeVisible = true;
 } else {
 shouldMiniPlayerBeVisible = false;
}
  setState(() {});
 });

这基本上将跟踪是否有任何音频正在播放或没有,然后显示基于它的迷你播放器。
现在在你运行await item.player.play();之前,把你的currentAudio变量设置为正在运行的新音频,你可以用这样的函数来完成:

Future<void> playCurrentAudioANdShowItInMiniPlayer(YourAudioModel audio) async {
currentAudio = YourAudioModel;
await item.player.play();
}

现在,从UI中,对于ListView中的每一项,只需使用YourAudioModel调用playCurrentAudioANdShowItInMiniPlayer方法,并期望它正常工作。
从这里,你应该实现实际的迷你播放器小部件,你还需要一个自定义的Navigator小部件,这样迷你播放器将在屏幕上,即使你导航到其他屏幕,嗯,我以前遇到过这个问题,miniplayer的工作真的很好,正如我所期望的,我建议你使用它。

相关问题