0

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

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

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

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

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

4

1 回答 1

1

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

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

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

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

于 2021-04-15T21:50:02.947 回答