Flutter ';呼叫';从有状态小部件调用父回调函数时为null
我想有一个多节表单,它有几个子表单,当完成并验证后将回调到父窗口小部件,以便转到下一个子表单 我的问题是我一直收到一个错误,说函数为null,我不知道为什么 我尝试在子对象的StatefulWidget中使用函数,但在通过“complete”函数调用父对象时,我总是收到一个错误,说该函数为nullFlutter ';呼叫';从有状态小部件调用父回调函数时为null,flutter,widget,Flutter,Widget,我想有一个多节表单,它有几个子表单,当完成并验证后将回调到父窗口小部件,以便转到下一个子表单 我的问题是我一直收到一个错误,说函数为null,我不知道为什么 我尝试在子对象的StatefulWidget中使用函数,但在通过“complete”函数调用父对象时,我总是收到一个错误,说该函数为null I/flutter (23821): ══╡ EXCEPTION CAUGHT BY GESTURE ╞════════════════════════════════════════════════
I/flutter (23821): ══╡ EXCEPTION CAUGHT BY GESTURE ╞═══════════════════════════════════════════════════════════════════
I/flutter (23821): The following NoSuchMethodError was thrown while handling a gesture:
I/flutter (23821): The method 'call' was called on null.
I/flutter (23821): Receiver: null
I/flutter (23821): Tried calling: call()
我认为我做得很正确,但对于下一步要尝试什么,我有点不知所措,下面是我的代码:
父窗口小部件
class CreateForm extends StatefulWidget {
CreateForm({
Key key
}): super(key: key);
CreateFormState createState() => CreateFormState();
}
class CreateFormState extends State < CreateForm > {
bool userDetailsCompleted = false;
final formKey = GlobalKey < FormState > ();
@override
Widget build(BuildContext context) {
return !userDetailsCompleted ? UserDetailsForm(
completed: () {
print("testing");
// setState(() {
// userDetailsCompleted = true;
// });
},
) : nextSection(
);
}
}
类CreateForm扩展StatefulWidget{
创造形式({
钥匙
}):super(key:key);
CreateFormState createState()=>CreateFormState();
}
类CreateFormState扩展了状态{
bool userDetailsCompleted=false;
最终formKey=GlobalKey();
@凌驾
小部件构建(构建上下文){
return!userDetailsCompleted?UserDetailsForm(
已完成:(){
打印(“测试”);
//设置状态(){
//userDetailsCompleted=true;
// });
},
):下一节(
);
}
}
子部件
class UserDetailsForm extends StatefulWidget {
final Function completed;
UserDetailsForm({
@required this.completed,
Key key
}): super(key: key);
UserDetailsFormState createState() => UserDetailsFormState();
}
class UserDetailsFormState extends State < UserDetailsForm > {
@override
Widget build(BuildContext context) {
return Form(
child: CustomButton(
size: 15,
text: 'Submit',
onPressed: () {
print('UserDetails account form submit');
widget.completed();
},
)
);
}
}
类UserDetailsForm扩展StatefulWidget{
最终功能完成;
用户详细信息表单({
@要求完成此项,
钥匙
}):super(key:key);
UserDetailsFormState createState()=>UserDetailsFormState();
}
类UserDetailsFormState扩展状态{
@凌驾
小部件构建(构建上下文){
报税表(
子:自定义按钮(
尺码:15,
文本:“提交”,
已按下:(){
打印('UserDetails帐户表单提交');
widget.completed();
},
)
);
}
}
我在本地尝试了您的代码,它可以正常工作。我认为您只需要重新启动Flutter,因为可能您刚才刚刚将Stateles替换为Stateful小部件
全面运作回购
您也可以在本地构建它
演示