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 只是一个依赖注入框架,你不能将它用于状态管理(单独)。 您应该已经向我们提供了您的代码示例,但我假设您将 ProviderChangeNotifier 一起使用。 在这种情况下,您只需要使用 Consumer 小部件,该小部件在此功能内具有 build 功能您将要重建的.. Here is a Medium article

另一种方法是结合使用 ProviderStreams,您可以像使用 Consumer 一样使用 StreamBuilder Widget ..

【讨论】:

以上是关于Flutter Provider 重建不必要的小部件的主要内容,如果未能解决你的问题,请参考以下文章

Flutter Provider 不会重建小部件

Flutter Provider-重建列表项而不是列表视图

使用上下文和观察更改模型时,Flutter Provider 不会触发重建

由于当前屏幕上的更新,防止 Flutter Provider 在前一屏幕中重建小部件

如何对访问 Provider.of(context) 的小部件进行 Flutter 测试

三元条件没有重建我的小部件 - Flutter