我正在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();
我想在底部显示迷你播放器只有当有一首歌曲播放(暂停),刷新歌曲描述,我如何获得歌曲描述(艺术家/歌曲)?
1条答案
按热度按时间u1ehiz5o1#
我会让你的迷你播放器小部件的实现为你,但是,我会考虑到我有一个
shouldMiniPlayerBeVisible
,在Scaffold
您的页面:首先,声明并初始化一个
shouldMiniPlayerBeVisible
变量,该变量将管理迷你播放器的显示/隐藏:和一个
currentAudio
,它将采取的歌曲,并通过它在迷你播放器。这里,我假设我有一个简单的
YourAudioModel
,它将保存音频的信息,如标题、描述、长度、URL(或本地)路径...我建议最初不要将其设置为
null
,您可以使用具有一些虚拟数据的占位符YourAudioModel
音频模型初始化它,或者加载数据信息,例如...现在在您的支架上:
我将考虑您使用的是
StatefulWidget
,但步骤与您需要的相同,只是为了了解它的概念,以便在其他状态管理解决方案中实现它。在
initState
中,您需要侦听playerStateStream
流,如下所示:这基本上将跟踪是否有任何音频正在播放或没有,然后显示基于它的迷你播放器。
现在在你运行
await item.player.play();
之前,把你的currentAudio
变量设置为正在运行的新音频,你可以用这样的函数来完成:现在,从UI中,对于
ListView
中的每一项,只需使用YourAudioModel
调用playCurrentAudioANdShowItInMiniPlayer
方法,并期望它正常工作。从这里,你应该实现实际的迷你播放器小部件,你还需要一个自定义的
Navigator
小部件,这样迷你播放器将在屏幕上,即使你导航到其他屏幕,嗯,我以前遇到过这个问题,miniplayer的工作真的很好,正如我所期望的,我建议你使用它。