【问题标题】:Is InheritedWidget should always need to be a child of StatefulWidget?InheritedWidget 是否应该始终是 StatefulWidget 的子级?
【发布时间】:2021-05-16 23:57:03
【问题描述】:

我对 InheritedWidget 的了解?

InheritedWidgets 不是重建的,而是我们必须创建一个具有新值的新 InheritedWidget。 然后在 updateShouldNotify() 方法内部会比较它的旧对象和当前对象并返回 true 或 false。

如果 updateShouldNotify() 返回 true -> 依赖的上下文将被重建。

如果 updateShouldNotify() 返回 false -> 则依赖上下文不会重建。

@override
bool updateShouldNotify(_InheritedCount old) {
  return old.state != state;
}

所以每次我们创建前一个 InheritedWidget 的新实例时,都会调用 updateShouldNotify() 方法并决定是否重建其依赖项。

关于 InheritedWidget 我想知道什么?(我感到困惑的事情)

  1. 是否每个 InheritedWidget 都需要使用 StatefulWidget 进行包装才能创建该 InheritedWidget 的新实例?
  2. 当 ChangeNotifier 对象向其 ChangeNotifierProvider() 发送更改通知时,ChangeNotifierProvider 是否将其 InheritedWidget(或 InheritedProvider)包装在 StatefulWidget 中以重新创建新的 InheritedWidget?

(请善待我如何处理英语)

【问题讨论】:

    标签: flutter provider inherited-widget


    【解决方案1】:

    确实,大多数时候您需要将InheritedWidget 包装在StatefulWidget 中以进行重建。

    使用InheritedNotifier 而不是InheritedWidget 时有一个例外,但这种情况相当罕见。

    当 ChangeNotifier 对象向其 ChangeNotifierProvider() 发送更改通知时,ChangeNotifierProvider 是否将其 InheritedWidget(或 InheritedProvider)包装在 StatefulWidget 中以重新创建新的 InheritedWidget?

    这类似于 Provider 所做的,是的。

    虽然它没有使用这种精确的组合。相反,Provider 实现了一种新的 InheritedWidget:InheritedProvider

    这个InheritedProvider 是一个StatefulWidget 和一个InheritedWidget 在一个小部件中。这是一个InheritedWidget 和一个setState / dispose

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-16
      • 2017-02-11
      • 2015-01-30
      • 2021-10-11
      • 1970-01-01
      • 1970-01-01
      • 2011-06-06
      相关资源
      最近更新 更多