【问题标题】:Is it possible to not reuse child widgets in using Flutter's AnimatedList?在使用 Flutter 的 AnimatedList 时是否可以不重用子小部件?
【发布时间】:2021-07-10 22:48:23
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: flutter flutter-animatedlist


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 选项 4 似乎实施时间最长,但效率最高,因为它允许您回收聊天。如果我这样做了,这不仅仅是关于播放器的问题,我还必须处理音频进度条的动画聊天气泡内容。我实际上倾向于这样做,因为这似乎是正确的做法,我倾向于拥有一个知道音频位置的单例音频聊天气泡管理器,因此可以使用进度条并处理哪些音频正在玩。是的,一次只想要一个。
    猜你喜欢
    • 1970-01-01
    • 2022-10-24
    • 2018-04-28
    • 2018-08-24
    • 2011-10-21
    • 1970-01-01
    • 2021-11-28
    • 2018-11-26
    • 1970-01-01
    相关资源
    最近更新 更多