1

使用 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), () {}); 仍然面临问题。

某处出现问题,无法识别,感谢任何帮助!谢谢

4

1 回答 1

0

也许是因为 FutureBuilder 不是孩子:

FutureBuilder(
            future: _getPersonalInfoFormInitialValue(),
           builder: (context, snapshot) => buildFormBuilder(context, snapshot.data) ,
          ),

也许这行得通,因为 Futurebuilder 不是孩子,而在下一个孩子中:

孩子:未来建造者

于 2020-09-30T09:43:29.817 回答