动态生成的TextEditingController取值为null该如何解决?
问题原因
你遇到的空值问题主要由3个代码错误导致:
- 自定义的
TextEditingModel类没有声明text属性,你直接调用item.text相当于访问不存在的属性,自然返回null hintchange()方法的返回值类型声明错误,你声明返回TextEditingModel类型,但实际返回的是TextEditingController实例,存在类型不匹配问题- 没有正确从
TextEditingController实例中获取输入文本
解决步骤
- 修正
TextEditingModel的代码,补全类型声明,可新增文本快捷获取的getter简化后续调用 - 修正输入框控制器绑定逻辑,删除冗余方法
- 取值时通过控制器实例的
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
相关产品推荐
相关产品推荐

