我正在开发一个 Flutter 应用程序,它具有类似于 whatsapp 的功能,其中可以有一堆基本上是音频播放器的消息。我正在使用 AnimatedList
以便聊天气泡进出动画。
问题是 AnimatedList
似乎不支持 keepAlive
,而且我还没有遇到任何替代方案。我不希望小部件被回收,因为如果正在播放一条消息并且我将消息滚动进和滚出视图,我希望消息继续播放和动画,现在我在每个孩子中实例化一个音频播放器和动画控制器小部件。如果我在子小部件之外保持所有这些状态(与列表处于同一级别),我可以看到这更“最佳”,但此应用程序中每个对话的最大聊天气泡数量约为 50,我们希望快速移动而不是现在最佳,所以我认为如果我可以让小部件保持活力,这种简化是一个好主意。
我尝试将子小部件包装在 KeepAlive
中,但没有成功。以下似乎是我的选择:
我很想知道来自社区的潜在解决方案。谢谢!
答案 0 :(得分:1)
所有建议的解决方案都很好(如果您需要它快速工作,第四个可能是最可靠的,但肯定不是最有效的......)。
您是否考虑过使用一个 InheritedWidget 将其放置在动画列表上方,以控制音频播放器。 (我假设您一次只想播放一个音频)。
因此,具体而言,您将拥有一个继承的小部件,该小部件将公开 start(File file) 方法和 pause(File file) 方法以及持续时间属性和正在播放的当前消息的唯一标识符。这将允许您保持状态结构简单并且仍然非常高效。
如果我的解释不够清楚,我可以写一段代码。