defineOnInheritedWidgetOfExactType()返回null

时间:2019-12-19 06:55:47

标签: flutter dart

我试图将InheritedWidget的属性发送给它的孩子。

class Detector extends InheritedWidget {
  final bool isEditable;

  Detector({@required this.isEditable, @required Widget child, Key key})
      : super(child: child, key: key);

  static Detector of(BuildContext context) {
    return context.dependOnInheritedWidgetOfExactType<Detector>();
  }

  @override
  bool updateShouldNotify(Detector oldWidget) {
    return oldWidget.isEditable != isEditable;
  }
}

I referred here。该小部件是通过以下方式创建的:

Detector(
  isEditable: otherObj.isEditable,
  child: command.makeWidget(context) // Extension method that returns new widget
);

然后makeWidget()方法调用of方法:

   final detector = Detector.of(context);
    if (detector != null && detector.isEditable) {
      return Container(
        child: ...,
      );
    }

始终返回null。 为什么dependOnInheritedWidgetOfExactType()返回null?我使用扩展方法,但使用祖先小部件提供上下文。

1 个答案:

答案 0 :(得分:2)

这是您不应使用函数而不是类来制作可重用小部件的原因之一。 What is the difference between functions and classes to create widgets?

您正在dependOnInheritedWidgetOfExactType<Detector>的祖先BuildContext上呼叫Detector

代替:

Detector(
  isEditable: otherObj.isEditable,
  child: command.makeWidget(context) // Extension method that returns new widget
);

command.makeWidget(context)重构为StatelessWidget类而不是函数。

这将给您BuildContext的后代Detector,并解决您的问题。