首页 > 解决方案 > 如何访问 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: ...
  )
);

标签: flutterdart

解决方案


推荐阅读