Flutter Provider 重建不必要的小部件
Posted
技术标签:
【中文标题】Flutter Provider 重建不必要的小部件【英文标题】:Flutter Provider rebuilds unnecessary widgets 【发布时间】:2019-12-09 04:26:18 【问题描述】:我正在用 Flutter 上的提供商架构构建一个移动应用程序。
根据设计,我正在使用一个带有 changeNotifier 的模型,其中包含一个对象列表。
每当列表对象中的一个发生变化时,整个列表就会被重建,这是不应该的。
为了模拟这一点,我创建了一个如下所示的简单应用程序。顶行是项目列表,而底行是详细的小部件。但是每当我同时点击列表小部件和详细小部件时,都会重新构建。
这里是源代码。 Github Link
这是示例截图
这是我的问题。
-
如何只听子对象?
我在这里犯了什么错误?
【问题讨论】:
【参考方案1】:提供者状态管理包提供消费者。使用消费者时,您可以选择传入您不希望重建的子小部件。以及一个构建器方法,然后接受子级(大部分处于这种状态下是静态的并且不需要重建)以及在您的情况下要重建的小部件,如果我没记错的话,底部的详细信息卡。您可以从文档中学习更多内容,前提是它们非常不言自明。 https://github.com/rrousselGit/provider/blob/master/README.md
此外,此链接中的媒体帖子还解释了很多关于提供程序包的工作原理。 https://medium.com/flutter-nyc/a-closer-look-at-the-provider-package-993922d3a5a5
【讨论】:
【参考方案2】:老实说,我认为您不必担心完全重建,但如果它困扰您,有一个 Selector 小部件,您可以使用它来收听列表中项目的特定值。
【讨论】:
【参考方案3】:也许有点晚了,但是对于任何人都有这个问题。 Provider 只是一个依赖注入框架,你不能将它用于状态管理(单独)。 您应该已经向我们提供了您的代码示例,但我假设您将 Provider 与 ChangeNotifier 一起使用。 在这种情况下,您只需要使用 Consumer 小部件,该小部件在此功能内具有 build 功能您将要重建的.. Here is a Medium article
另一种方法是结合使用 Provider 和 Streams,您可以像使用 Consumer 一样使用 StreamBuilder Widget ..
【讨论】:
以上是关于Flutter Provider 重建不必要的小部件的主要内容,如果未能解决你的问题,请参考以下文章
使用上下文和观察更改模型时,Flutter Provider 不会触发重建
由于当前屏幕上的更新,防止 Flutter Provider 在前一屏幕中重建小部件