flutter - InheritedWidget 是否应该始终是 StatefulWidget 的子级?
问题描述
我对 InheritedWidget 的了解?
InheritedWidgets 不是重建,而是我们必须创建一个具有新值的新 InheritedWidget。然后在 updateShouldNotify() 方法内部将比较它的旧对象和当前对象并返回 true 或 false。
如果 updateShouldNotify() 返回true -> 则依赖上下文得到重建。
如果 updateShouldNotify() 返回false -> 则依赖上下文不会重建。
@override
bool updateShouldNotify(_InheritedCount old) {
return old.state != state;
}
因此,每次我们创建前一个 InheritedWidget 的新实例时,都会调用该 updateShouldNotify() 方法并决定是否重建其依赖项。
关于 InheritedWidget 我想知道什么?(我困惑的事情)
- 是否每个 InheritedWidget 都需要用 StatefulWidget 包装以创建该 InheritedWidget 的新实例?
- 当 ChangeNotifier 对象向其 ChangeNotifierProvider() 发送更改通知时,ChangeNotifierProvider 是否将其 InheritedWidget(或 InheritedProvider)包装在 StatefulWidget 中以重新创建新的 InheritedWidget?
(善待我如何处理英语)
解决方案
实际上,大多数情况下您需要将 a 包裹起来以InheritedWidget
进行StatefulWidget
重建。
使用InheritedNotifier
而不是时有一个例外InheritedWidget
,但这种情况相当罕见。
当 ChangeNotifier 对象向其 ChangeNotifierProvider() 发送更改通知时,ChangeNotifierProvider 是否将其 InheritedWidget(或 InheritedProvider)包装在 StatefulWidget 中以重新创建新的 InheritedWidget?
这类似于 Provider 所做的,是的。
但它没有使用这种精确的组合。相反,Provider 实现了一种新的 InheritedWidget: InheritedProvider
。
这在单个小部件中InheritedProvider
既是 aStatefulWidget
又是a。InheritedWidget
这是一个InheritedWidget
带setState
/的dispose
推荐阅读
- python - 装饰器停止自动运行
- c# - Asp.Net Core Identity 获取整数用户 ID
- c# - 使用静态代码为应用创建 Web API
- apache - 如何使用 Apache mod_mellon 模块签署 AuthnRequest
- php - 这个序列化的字符串有什么问题
- c++ - 这是使用 docker 开发多层 C/C++ 应用程序的好方法吗?
- c# - 如何修复该内部查询
- django - Django OperationalError:SSL SYSCALL 错误:检测到 EOF
- jquery - 动态添加带有 ids 和 classes 的表行
- android - 在 Android Studio 中创建下载器库