我正在用颤振的提供者架构构建一个移动应用程序。
根据设计,我正在使用一个带有 changeNotifier 的模型,其中包含一个对象列表。
每当列表对象之一发生变化时,整个列表都会被重建,而这是不应该的。
为了模拟这一点,我创建了一个简单的应用程序,如下所示。顶行是项目列表,而底行是详细的小部件。但是,每当我同时点击列表小部件和详细小部件时,都会重新构建。
这是源代码。 Github 链接
这是我的问题。
- 如何只听子对象?
- 我在这里犯了什么错误?
我正在用颤振的提供者架构构建一个移动应用程序。
根据设计,我正在使用一个带有 changeNotifier 的模型,其中包含一个对象列表。
每当列表对象之一发生变化时,整个列表都会被重建,而这是不应该的。
为了模拟这一点,我创建了一个简单的应用程序,如下所示。顶行是项目列表,而底行是详细的小部件。但是,每当我同时点击列表小部件和详细小部件时,都会重新构建。
这是源代码。 Github 链接
这是我的问题。
提供者状态管理包提供消费者。使用消费者时,您可以选择传入您不希望重建的子小部件。还有一个构建器方法,然后接受子级(大部分处于这种状态下是静态的,不需要重建)以及要在您的情况下重建的小部件,如果我没记错的话,底部的详细信息卡。您可以从文档中学习更多内容,前提是它们非常不言自明。https://github.com/rrousselGit/provider/blob/master/README.md
此链接中的媒体帖子还解释了有关提供程序包的工作原理的很多内容。 https://medium.com/flutter-nyc/a-closer-look-at-the-provider-package-993922d3a5a5
也许有点晚了,但是对于任何人都有这个问题。 Provider只是一个依赖注入框架,你不能将它用于状态管理(单独)。您应该已经向我们提供了您的代码示例,但我会假设您正在使用Provider和ChangeNotifier。在这种情况下,您只需要使用在此功能中具有构建功能的消费者小部件您将要重建的东西放在这里。 这是一篇中型文章
另一种方法是使用Provider和Streams的组合,您可以像使用Consumer一样使用StreamBuilder Widget 。
老实说,我认为您不必担心完全重建,但如果它困扰您,有一个 Selector 小部件,您可以使用它来收听列表中项目的特定值。