InheritedWidget 是否应该总是需要成为 StatefulWidget 的 child?

Is InheritedWidget should always need to be a child of StatefulWidget?

我对 InheritedWidget 了解多少?

InheritedWidget 不是重建的,而是我们必须创建一个具有新值的新 InheritedWidget。 然后在 updateShouldNotify() 方法内部将比较其旧的和当前的 object 和 return true 或 false.

if updateShouldNotify() returns true -> 然后相关上下文得到重建。

if updateShouldNotify() returns false -> 依赖上下文不会重建。

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

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

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

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

(请善待我处理英语的方式)

事实上,大多数时候您需要将 InheritedWidget 包裹在 StatefulWidget 中才能进行重建。

使用 InheritedNotifier 而不是 InheritedWidget 时会出现异常,但这种情况很少见。

Does ChangeNotifierProvider wrap its InheritedWidget (or InheritedProvider) in a StatefulWidget to recreate new InheritedWidget, when ChangeNotifier object sends change notification to its ChangeNotifierProvider() ?

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

虽然它不使用这个确切的组合。相反,Provider 实现了一种新的 InheritedWidget:InheritedProvider.

InheritedProvider 在一个小部件中既是 StatefulWidget 又是 InheritedWidget。这是一个 InheritedWidgetsetState / dispose