Flutter 提供程序和ChangeNotifierProvider之间的差异

Flutter 提供程序和ChangeNotifierProvider之间的差异,flutter,dart,Flutter,Dart,这两个小部件与在每个提供程序中使用ChangeNotifier的必要性有什么区别?或者有许多方法可以使用提供程序?提供程序在小部件树下公开一个值,以便孩子可以访问它,而不管他们在何处,但他们必须至少比提供程序低一级。通常,您使用提供者将缓存公开给一系列小部件,或者作为跨多个页面共享数据的一种简洁方式。请注意: 默认情况下,当读取存储在提供程序中的值时,不会发生任何事情。这意味着,如果你公开了一个类,并且你改变了它的一些内部结构,孩子们就不会听 如果通过提供程序公开的类与ChangeNotifie

这两个小部件与在每个提供程序中使用ChangeNotifier的必要性有什么区别?或者有许多方法可以使用提供程序?

提供程序在小部件树下公开一个值,以便孩子可以访问它,而不管他们在何处,但他们必须至少比提供程序低一级。通常,您使用提供者将缓存公开给一系列小部件,或者作为跨多个页面共享数据的一种简洁方式。请注意:

默认情况下,当读取存储在提供程序中的值时,不会发生任何事情。这意味着,如果你公开了一个类,并且你改变了它的一些内部结构,孩子们就不会听

如果通过提供程序公开的类与ChangeNotifier混合,那么当某些内容发生更改时,您就有可能重建侦听器

您绝对不会被迫在提供者公开的模型类中使用ChangeNotifier。当您需要一些小部件来监听更改时使用它,但如果不是这样,就忽略它

示例1-无变更适用者

您正在使用TabBarView来处理选项卡,假设您有3个页面,并且您的页面需要共享一些数据。与其使用导航器共享数据(这可能会变得很麻烦),不如选择提供商

class MyDataHolder {
  int _value = 0;

  void updateValue(int a) {
    _value = a;
  }
}
然后像这样做:

Provider<MyDataHolder>(
  create: (_) => MyDataHolder(),
  child: MyWidgetWithTabs(),
)
现在孩子们倾听变化。与以前不同的是,调用updateValue时将重建侦听器


所以这两种方法都是好的,但它们有不同的目的。如果您不需要重建一系列侦听器来响应更新,就不要使用ChangeNotifier。

提供程序在小部件树下公开一个值,以便子部件可以访问它,而不管其位置如何,但它们必须至少比提供程序低一级。通常,您使用提供者将缓存公开给一系列小部件,或者作为跨多个页面共享数据的一种简洁方式。请注意:

默认情况下,当读取存储在提供程序中的值时,不会发生任何事情。这意味着,如果你公开了一个类,并且你改变了它的一些内部结构,孩子们就不会听

如果通过提供程序公开的类与ChangeNotifier混合,那么当某些内容发生更改时,您就有可能重建侦听器

您绝对不会被迫在提供者公开的模型类中使用ChangeNotifier。当您需要一些小部件来监听更改时使用它,但如果不是这样,就忽略它

示例1-无变更适用者

您正在使用TabBarView来处理选项卡,假设您有3个页面,并且您的页面需要共享一些数据。与其使用导航器共享数据(这可能会变得很麻烦),不如选择提供商

class MyDataHolder {
  int _value = 0;

  void updateValue(int a) {
    _value = a;
  }
}
然后像这样做:

Provider<MyDataHolder>(
  create: (_) => MyDataHolder(),
  child: MyWidgetWithTabs(),
)
现在孩子们倾听变化。与以前不同的是,调用updateValue时将重建侦听器

所以这两种方法都是好的,但它们有不同的目的。如果您不需要为响应更新而重建一系列侦听器,就不要使用ChangeNotifier