You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter动态生成文本表单时如何使用不同文本编辑控制器

解决动态TextField共用控制器的问题

要让每个动态生成的TextField拥有独立的输入内容,核心是给每个TextField分配单独的TextEditingController,具体实现步骤如下:

  1. 替换单个控制器为控制器列表
    把原来的单个TextEditingController声明改成一个列表,用来存储每个TextField对应的控制器:

    int numberOfTextFields = 0;
    List<TextEditingController> _controllers = [];
    
  2. 添加TextField时同步新增控制器
    点击按钮增加TextField数量的同时,往控制器列表里添加新的TextEditingController实例:

    void addTextField() {
      setState(() {
        numberOfTextFields++;
        _controllers.add(TextEditingController());
      });
    }
    
  3. 绑定每个TextField到对应控制器
    生成TextField时,通过索引从列表中取出对应的控制器绑定:

    Column(
      children: [
        for(int i = 0 ; i < numberOfTextFields ; i++)
          TextField(
            controller: _controllers[i],
            decoration: InputDecoration(
              labelText: 'Number ${i+1}',
            ),
          ),
      ],
    ),
    
  4. 销毁控制器避免内存泄漏
    在页面销毁时,遍历列表销毁所有控制器,防止内存泄漏:

    @override
    void dispose() {
      for (var controller in _controllers) {
        controller.dispose();
      }
      super.dispose();
    }
    

如果需要支持删除TextField的功能,记得在减少numberOfTextFields的同时,从_controllers中移除对应位置的控制器并调用其dispose方法,避免内存浪费。

内容的提问来源于stack exchange,提问作者Aadhil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 22:40:23