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

动态生成的TextEditingController取值为null该如何解决?

问题原因

你遇到的空值问题主要由3个代码错误导致:

  1. 自定义的TextEditingModel类没有声明text属性,你直接调用item.text相当于访问不存在的属性,自然返回null
  2. hintchange()方法的返回值类型声明错误,你声明返回TextEditingModel类型,但实际返回的是TextEditingController实例,存在类型不匹配问题
  3. 没有正确从TextEditingController实例中获取输入文本

解决步骤

  1. 修正TextEditingModel的代码,补全类型声明,可新增文本快捷获取的getter简化后续调用
  2. 修正输入框控制器绑定逻辑,删除冗余方法
  3. 取值时通过控制器实例的text属性获取内容

修正后代码

1. Model类代码

class TextEditingModel {
  // 修复空安全声明,支持自定义初始文本
  late TextEditingController hint;

  TextEditingModel({String? initText}) {
    hint = TextEditingController(text: initText ?? '');
  }

  // 快捷获取输入文本的getter,也可以直接访问hint.text
  String get text => hint.text;
  // 快捷返回控制器的getter,用于绑定输入框
  TextEditingController get controller => hint;
}

2. 页面逻辑代码

// 控制器列表声明
List<TextEditingModel> textEditingControllers = [];

// 添加输入框按钮
RaisedButton(
  child: const Text('Add Controller'),
  onPressed: () {
    setState(() {
      // 支持传入初始文本,不需要初始值直接写TextEditingModel()即可
      TextEditingModel model = TextEditingModel(initText: '自定义初始值');
      textEditingControllers.add(model);
    });
  },
),

// 生成对应数量的输入框
for(final item in textEditingControllers)
  TextFormField(
    controller: item.controller,
  ),

// 打印所有输入框文本的示例,不会返回null
for(var item in textEditingControllers) {
  print(item.text);
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 15:09:00