【问题标题】:Dynamically add fields in a Flutter Form Widget在 Flutter Form Widget 中动态添加字段
【发布时间】:2019-09-06 14:58:49
【问题描述】:

我整天都在寻找答案,我正在尝试在表单中动态添加字段(目前,通过创建一个创建字段的循环),我找不到我的问题的任何答案.如果你能做点什么,请告诉我:

我正在使用我的 Fieldset 类创建一个视图,这是我的表单,我在里面放了一个字段列表:

List<Field> fieldset;

void main() {

for (int i = 0; i < 10; i++) {
  Field field = Field();
  fieldset.add(field);
};
runApp(MyApp());
}

class MyApp extends StatelessWidget {
@override
Widget build(BuildContext context) {
final appTitle = 'Form Validation Demo';

return MaterialApp(
  title: appTitle,
  home: Scaffold(
    appBar: AppBar(
      title: Text(appTitle),
    ),
    body: Fieldset(fieldset: List<Field>()),
  ),
);
}
}

如您所见,我只是启动应用程序,使用循环创建一些字段并将其放入 Fieldset Widget 继续:

class Fieldset extends StatefulWidget {
final List<Field> fieldset;
final state = _FieldsetState();

@override
_ FieldsetState createState() {
return _FieldsetState();
}

Fieldset({this.fieldset});


}

class _FieldsetState extends State<Fieldset> {
final _formKey = GlobalKey<FormState>();

@override
Widget build(BuildContext context) {
return Form(
    key: _formKey,
    child: Column(
        crossAxisAlignment: CrossAxisAlignment.start,
        children: <Widget> [
       // widget.fieldset.forEach((f) => f.build(context)) ==> THIS DOESN'T WORK
          ,
          RaisedButton(
            onPressed: () {
              if (_formKey.currentState.validate()) {
                Scaffold.of(context)
                    .showSnackBar(SnackBar(content:                                             Text('processing')));
              }
            },
            child: Text('Submit'),
          )
        ]));
}
}

我真的希望你能帮助我,看起来我错过了一些东西..

【问题讨论】:

    标签: android mobile flutter dart


    【解决方案1】:

    试试这个

    var listOfFields = <Widget>[];
    listOfFields.add(RaisedButton( onPressed : (){
      addNewField(); 
    }, child: Text("Add new Field")
    ));
    void addNewField(){
       setState((){
       listOfFields.add(TextFormField());
       });
    }
    final _formKey = GlobalKey<FormState>()
    
      @override
      Widget build(BuildContext context) {
        return Form(
          key : _formKey,
          child :Scaffold(
           body : ListView.builder(
              itemCount: listOfFields.length,
              itemBuilder: (context, index){
                return listOfFields[index]; 
              }
           )
        )
        );
    
      }
    

    【讨论】:

    • 我理解这个方法,但不幸的是我不能直接在 _FieldsetState 中调用 listOfFields.add 。但是谢谢你的伎俩,我做得很好;)
    • 尝试 widget.listOfFields 访问 _FieldsetState 类中的 listOfFields
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 1970-01-01
    • 2022-01-01
    • 2021-06-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多