【问题标题】:Flutter Provider rebuilds unnecessary widgetsFlutter Provider 重建不必要的小部件
【发布时间】:2019-12-09 04:26:18
【问题描述】:

我正在用 Flutter 上的提供商架构构建一个移动应用程序。

根据设计,我正在使用一个带有 changeNotifier 的模型,其中包含一个对象列表。

每当列表对象中的一个发生变化时,整个列表就会被重建,这是不应该的。

为了模拟这一点,我创建了一个如下所示的简单应用程序。顶行是项目列表,而底行是详细的小部件。但是每当我同时点击列表小部件和详细小部件时,都会重新构建。

这里是源代码。 Github Link

这是示例截图

这是我的问题。

  1. 如何只听子对象?
  2. 我在这里犯了什么错误?

【问题讨论】:

    标签: flutter flutter-provider


    【解决方案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 ..

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-12-09
          • 2020-04-21
          • 1970-01-01
          • 2021-03-03
          • 2021-07-16
          • 1970-01-01
          • 2020-07-25
          • 2020-12-22
          相关资源
          最近更新 更多