首页 > 解决方案 > InheritedWidget 是否应该始终是 StatefulWidget 的子级?

问题描述

我对 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?

(善待我如何处理英语)

标签: flutterproviderinherited-widget

解决方案


实际上,大多数情况下您需要将 a 包裹起来以InheritedWidget进行StatefulWidget重建。

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

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

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

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

这在单个小部件中InheritedProvider既是 aStatefulWidget又是a。InheritedWidget这是一个InheritedWidgetsetState/的dispose


推荐阅读