使用 Future builder,能够在页面加载时填充先前保存的表单字段值。但是当快照为空时,它必须显示空表单
当表单有一些初始值时,下面的代码工作正常
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Container(
height: MediaQuery.of(context).size.height,
child:FutureBuilder(
future: _getPersonalInfoFormInitialValue(),
builder: (context, snapshot) => snapshot.hasData ? buildFormBuilder(context, snapshot.data) : Center(child: Text('Loading .....')),
),
),
),
);
}
当 snapshot.data 为空时,此代码工作正常,它按预期显示空表单
FutureBuilder(
future: _getPersonalInfoFormInitialValue(),
builder: (context, snapshot) => buildFormBuilder(context, snapshot.data) ,
),
因此,我将两者结合起来,使表格适用于所有情况,
Widget build(BuildContext context) {
return SafeArea(
child: Scaffold(
body: Container(
height: MediaQuery.of(context).size.height,
child:FutureBuilder(
future: _getPersonalInfoFormInitialValue(),
builder: (context, snapshot) => snapshot.hasData ? buildFormBuilder(context, snapshot.data) : buildFormBuilder(context, null) ,
),
),
),
);
}
buildFormBuilder 方法:
FormBuilder buildFormBuilder(BuildContext context, data) {
return FormBuilder(
key: _personalDetailFormKey,
initialValue: data ?? {},
autovalidate: true,
child: Stack(
children: <Widget>[
.........
_submitButton(() {
_submitPersonalDetailInfoForm();
}, 'Submit'),
],
),
);
}
_getPersonalInfoFormInitialValue
_getPersonalInfoFormInitialValue() async {
return _personalInfo!=null ? _personalInfo.toPersonalInfoMap() : null;
}
所以现在,在这两种情况下,它只显示表单的空字段。尽管 snapshot.data 有值,但它没有填充到表单字段中。我试过 Future.delayed(const Duration(seconds: 10), () {}); 仍然面临问题。
某处出现问题,无法识别,感谢任何帮助!谢谢