我试图将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?我使用扩展方法,但使用祖先小部件提供上下文。
答案 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
,并解决您的问题。