Flutter Provider重建不必要的小部件

时间:2019-07-31 15:32:15

标签: flutter flutter-provider

我正在开发带有供应商体系结构的移动应用程序。

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

当列表对象之一发生更改时,整个列表将被重建,而这本不应该如此。

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

这是源代码。 Github Link

这是示例屏幕截图 Image Screenshot

这是我的问题。

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

3 个答案:

答案 0 :(得分:0)

提供者状态管理包提供者消费者。使用使用者时,您可以选择传入不希望重建的子窗口小部件。然后是一个生成器方法,该方法接受子项(大多数情况下处于静态状态,不需要重建)以及小部件,如果我没有记错的话,该小部件将在您的情况下重建底部细节卡。您可以从文档中获取更多信息,前提是它们具有很好的自我解释性。 https://github.com/rrousselGit/provider/blob/master/README.md

此链接中的中篇文章也对提供程序包的工作原理进行了很多解释。 https://medium.com/flutter-nyc/a-closer-look-at-the-provider-package-993922d3a5a5

答案 1 :(得分:0)

老实说,我认为您不必担心整个重建过程,但是如果麻烦您,可以使用Selector小部件来侦听列表中该项目的特定价值。

答案 2 :(得分:0)

也许为时已晚,但是对于任何人都有这个问题。 Provider 仅仅是一个依赖项注入框架,您不能将其用于状态管理(单独)。 您应该已经向我们提供了代码示例,但是我假设您正在将 Provider ChangeNotifier 结合使用。 在这种情况下,您只需要使用 Consumer 组件,该组件在此函数内部具有 build 函数,就可以将其重建。 Here is a Medium article

另一种方法是使用 Provider Streams 的组合,并且可以像使用 Consumer一样使用 StreamBuilder 小部件。 ..