是否可以在使用 Flutter 的 AnimatedList 时不重用子小部件?

时间:2021-04-15 21:26:40

标签: flutter flutter-animatedlist

我正在开发一个 Flutter 应用程序,它具有类似于 whatsapp 的功能,其中可以有一堆基本上是音频播放器的消息。我正在使用 AnimatedList 以便聊天气泡进出动画。

问题是 AnimatedList 似乎不支持 keepAlive,而且我还没有遇到任何替代方案。我不希望小部件被回收,因为如果正在播放一条消息并且我将消息滚动进和滚出视图,我希望消息继续播放和动画,现在我在每个孩子中实例化一个音频播放器和动画控制器小部件。如果我在子小部件之外保持所有这些状态(与列表处于同一级别),我可以看到这更“最佳”,但此应用程序中每个对话的最大聊天气泡数量约为 50,我们希望快速移动而不是现在最佳,所以我认为如果我可以让小部件保持活力,这种简化是一个好主意。

我尝试将子小部件包装在 KeepAlive 中,但没有成功。以下似乎是我的选择:

  1. 有一些受支持的方法可以做到这一点,但我不知道
  2. 有一些替代/第 3​​ 方库支持此功能
  3. 尝试使用非动画列表并探索其他动画方法
  4. 在子节点之上实现状态

我很想知道来自社区的潜在解决方案。谢谢!

1 个答案:

答案 0 :(得分:1)

所有建议的解决方案都很好(如果您需要它快速工作,第四个可能是最可靠的,但肯定不是最有效的......)。

您是否考虑过使用一个 InheritedWidget 将其放置在动画列表上方,以控制音频播放器。 (我假设您一次只想播放一个音频)。

因此,具体而言,您将拥有一个继承的小部件,该小部件将公开 start(File file) 方法和 pause(File file) 方法以及持续时间属性和正在播放的当前消息的唯一标识符。这将允许您保持状态结构简单并且仍然非常高效。

如果我的解释不够清楚,我可以写一段代码。