我正在开发一个播放有声读物的应用程序,当你点击列表中的一本书时,一个完整的窗口播放器将开始播放这本书,但当你关闭/最小化它时,我希望一个迷你播放器在底部的导航栏上显示。这个玩家必须从第一个玩家";停止";直到用户决定暂停。
我不确定这是否可以在不必同时播放音频的情况下实现?原因是当全屏关闭时,玩家。调用Dispose。
我目前有一个函数可以保存玩家的位置并将其存储在共享的pref中,但它会缩短的秒数,所以即使我在迷你玩家中调用它,它也不会从同一位置继续。
顺便说一句,我是个新手,只有几个月的经验。提前感谢
您应该使用一个播放器,然后使用两个播放器"小部件";显示同一玩家的状态。这样,你就不需要尝试停止和启动播放器——播放器可以一直玩下去,而小部件是唯一改变的东西。
如果你是初学者,定义一个可以从任何地方引用的单个播放器的最简单方法是在任何类声明之外的全局变量中定义它(有关更高级的内容,请阅读服务定位器模式(:
final player = AudioPlayer();
假设您有两个小部件来查看同一播放器的状态:FullPlayerWidget
和MiniPlayerWidget
。它们都可以引用上面定义的相同player
实例。
最后,您的逻辑错误是在最小化完整播放器小部件时调用dispose
。除非你想让有声读物永久停止播放,否则你不应该这么做。你不希望它永久停止,甚至根本不希望它停止!
事实上,当最小化时,你唯一想发生的事情就是视觉上的事情。您想要隐藏完整的小部件并显示迷你小部件。但在音频方面,您希望player
本身不受影响,继续播放音频,就好像什么都没发生一样。因此,在这种情况下,实际上不应该在player
上调用任何方法。
作为一个初学者,你能做的最好的事情就是学习大量的例子。例如podcastproject(尽管它的依赖关系现在有点过时(。