我正在开发一个基于flutter的应用程序,正在创建一个包含表单以输入学生数据的视图,其中TextField可以根据需要进行扩展。因此,当单击Icons.add按钮时,将显示其他TextField。
问题是如何为每个TextField设置唯一的TextEditingController名称?
这是我的代码:
class _StudentFormState extends State<_StudentForm> {
final _addStudentForm = GlobalKey<FormState>();
final _nameController = TextEditingController();
final _emailController = TextEditingController();
int count = 1;
@override
Widget build(BuildContext context) {
List<Widget> children = List.generate(count, (int i) => _SingleStudent(i));
return Container(
child: ListView(
children: <Widget>[
Form(
key: _addStudentForm,
child: Column(
children: children
),
),
IconButton(
icon: Icon(Icons.add),
onPressed: () {
setState(() {
count += 1;
});
}
)
],
),
);
}
}
class _SingleStudent extends StatelessWidget {
final int index;
_SingleStudent(this.index);
@override
Widget build(BuildContext context) {
return Column(
children: <Widget>[
TextFormField(
controller: _nameController[index], // problem here
decoration: InputDecoration(
labelText: 'NAME',
),
),
TextFormField(
controller: _emailController, // problem here
decoration: InputDecoration(
labelText: 'EMAIL',
),
),
],
);
}
}
答案 0 :(得分:1)
您可以尝试将ListView更改为ListView.builder,然后将一个键设置为TextField,该键值将是index参数。