flutter - 如何访问 InheritedWidget 的 InheritedWidget?
问题描述
我有一个 InheritedWidget,其中包含我想传递给子小部件的字符串值 Map。我想要一个函数来访问最近的 InheritedWidget 的地图中的值,或者如果找不到该值,则继续向上树。有没有办法做到这一点?
class MyInherited extends InheritedWidget {
final Widget child;
final Map<String, String> names;
MyInherited(this.child,
{this.names = const {}})
: super(child: child);
@override
bool updateShouldNotify(InheritedWidget oldWidget) => names != oldWidget.names;
static MyInherited? of(BuildContext context) =>
context.dependOnInheritedWidgetOfExactType<MyInherited>();
// Something like this
String? getName(String key) => names[key] ?? nextUpChain.getValue(key);
}
所以在下面的例子中,如果我从第二个继承的小部件访问“key2”,我会得到“Bye”,如果我访问“key1”,我仍然会从最高父级得到“Hello World”。
MyInherited(
names: {
"key1": "Hello World",
"key2": "Hi",
},
child: MyInherited(
names: {
"key2": "Bye",
}
child: ...
)
);
解决方案
推荐阅读
- apache-spark - 如何计算 Spark Structured Streaming 中的滞后差异?
- javascript - AngularJS angular-ui-calendar TypeError: this.$compile 不是函数;this.$compile 在 $onInit() 内部时具有值,但在外部时未定义
- numpy - Numpy:将n维向量与m维向量相加得到(n,m)矩阵
- java - 将用户 ID 与文本文件中的用户 ID 进行比较
- reactjs - Webpack 不会为生产 css 文件中的图像创建正确的路径
- haskell - Haskell - 用不同的函数迭代元组
- javascript - Firebase - 使用回调检索和存储数组中的数据
- python - 使用 Flask 运行时启动功能
- javascript - PDF.JS:由于缩放而重新加载/重新渲染停止 JS 事件
- angular - Angular 6 Mat-Dialog 无法从路由器插座打开