Flutter TextFormField不会在重建时更新值

时间:2019-10-11 22:03:10

标签: flutter

我正在尝试编辑字符串列表。问题是,当我通过IconButton删除列表项时,TextField会重新生成,但仍旧具有旧值。通过调试,我发现我的字符串列表已正确更新,这意味着删除的字符串实际上已在列表中删除。

这是我的代码:

class EditInfoItemDialog extends StatefulWidget {

  @override
  State<StatefulWidget> createState() => _EditInfoitemDialogState();
}

class _EditInfoitemDialogState extends State<EditInfoItemDialog> {

  final _formKey = GlobalKey<FormState>();
  List<String> values = ['A', 'B', 'C'];

  @override
  Widget build(BuildContext context) {

    return Scaffold(
      body: Container(
        width: MediaQuery.of(context).size.width,
        child: Column(
          children: <Widget>[
            ...values.asMap().map((int index, String point) {
              return MapEntry(index, Row(
                children: [
                  Text(index.toString()),
                  Expanded(
                    child: TextFormField(
                      decoration: InputDecoration(hintText: 'Info'),
                      initialValue: values[index],
                      onChanged: (value) => setState(() {values[index] = value; }),
                    ),
                  ),
                  IconButton(
                    icon: Icon(Icons.delete),
                    color: Colors.red,
                    onPressed: () {
                      setState(() {
                        values.removeAt(index);
                        print(values);
                      });
                    },
                  )
                ]
              ));
            }).values.toList(),
            FlatButton(
              child: Text('Add Bulletpoint'),
              onPressed: () {
                setState(() {
                  if (values == null) values = [];
                  values.add('');
                });
              },
            )
          ],
        ),
      ),
    );

  }

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

您需要像这样将键添加到TextFormField中:

key: ObjectKey(values[index])

这里是一个说明和示例,说明了在这种情况下需要添加密钥的原因:What are Keys in the Stateless widgets class?

  

键是颤振引擎在识别步骤中使用的东西   列表中的哪个小部件已更改

更多信息: key property