我试图将我的财产发送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;
}
}
Run Code Online (Sandbox Code Playgroud)
我在这里提到的。小部件由以下人员创建:
Detector(
isEditable: otherObj.isEditable,
child: command.makeWidget(context) // Extension method that returns new widget
);
Run Code Online (Sandbox Code Playgroud)
和makeWidget()方法调用of方法:
final detector = Detector.of(context);
if (detector != null && detector.isEditable) {
return Container(
child: ...,
);
}
Run Code Online (Sandbox Code Playgroud)
总是返回空值。为什么dependOnInheritedWidgetOfExactType()返回null?我使用扩展方法,但给它一个祖先小部件的上下文。
这就是您不应该使用函数而不是类来制作可重用小部件的原因之一。创建小部件的函数和类有什么区别?
您正在调用dependOnInheritedWidgetOfExactType<Detector>的BuildContext祖先Detector。
代替:
Detector(
isEditable: otherObj.isEditable,
child: command.makeWidget(context) // Extension method that returns new widget
);
Run Code Online (Sandbox Code Playgroud)
重构command.makeWidget(context),使其成为一个StatelessWidget类而不是一个函数。
这将为您提供一个BuildContext的后代Detector,并将解决您的问题。
| 归档时间: |
|
| 查看次数: |
4854 次 |
| 最近记录: |