在我的LoginFormState中,我有
final signInFormKey = LabeledGlobalKey<FormState>("login_form");
static LoginFormState of(BuildContext context) {
return context.findAncestorStateOfType<LoginFormState>();
}
我的MainButton状态有这行
LoginFormState.of(context)
.signInFormKey
.currentState
.validate()
这两个都具有相同的父级,它们的父级是一个堆栈小部件:
[
Builder( builder: (BuildContext context) => AnimatedOpacity(
opacity: status == 0 ? 0 : 1,
duration: Duration(milliseconds: 500),
child: LoginForm(),
),
),
MainButton(),
]
当我在mainButton状态下调用该函数时,它会记录以下错误:
答案 0 :(得分:1)
发生错误是因为您在LoginFormState.of()
中调用了MainButton
方法,而它没有任何LoginForm
祖先。
那是您的小部件树:
Builder
AnimatedOpacity
LoginForm
MainButton
看到了吗?没有LoginForm“环绕” MainButton
。
您可能想做的是在LoginFormState
和GlobalKey
的祖先中声明一个MainButton
LoginForm
,最接近的是我在 cursive 中标记为上面,然后将其作为构造函数参数传递给LoginForm
小部件和MainButton
。
您还可以创建一个InheritedWidget
,它将包装这两个小部件并在其中同时公开SomeName.of()
方法,也可以使用provider package,即“ InheritedWidget,但适用于人类”(就像有人在Flutter Europe上所说的那样。