我一整天都在寻找答案,我正在尝试动态地在表单中添加字段(目前,通过创建一个创建字段的循环),我找不到我的问题的任何答案.如果你能做点什么,请告诉我:
我正在用我的 Fieldset 类创建一个 View ,这是我的表单,我在里面放了一个 Field 列表:
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'),
)
]));
}
}
我真的希望你能帮助我,看来我错过了什么..
最佳答案
试试这个
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];
}
)
)
);
}
关于android - 在 Flutter Form Widget 中动态添加字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57824417/