如何在可扩展窗体上处理控制器TextField

时间:2019-02-11 07:08:52

标签: dart flutter

我正在开发一个基于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',
          ),
        ),
      ],
    );
  }
}

1 个答案:

答案 0 :(得分:1)

您可以尝试将ListView更改为ListView.builder,然后将一个键设置为TextField,该键值将是index参数。