Flutter TextFormField绑定Controller后无法输入问题求助
问题解决:TextFormField添加controller后无法输入
问题原因
你在TextFormField中同时使用了controller和onChanged,并且在onChanged回调里手动执行phone.text = value,这会造成状态冲突:
- 绑定controller后,
TextFormField本身会通过controller自动同步输入内容 - 手动给
controller.text赋值会触发controller的状态更新,反过来干扰输入框的正常输入流程,导致键盘输入无响应
解决方案
直接移除onChanged里的phone.text = value代码即可;如果不需要额外的内容变更逻辑,甚至可以删掉整个onChanged回调。
修正后的代码:
final TextEditingController phone = TextEditingController(); TextFormField( textInputAction: TextInputAction.done, keyboardType: TextInputType.number, // 若需处理内容变化(如校验、格式化),可保留onChanged但不要直接修改controller.text // onChanged: (value) { // // 示例:限制输入长度为11位 // if (value.length > 11) { // phone.text = value.substring(0, 11); // phone.selection = TextSelection.fromPosition(TextPosition(offset: phone.text.length)); // } // }, controller: phone, style: const TextStyle( color: Colors.white, fontSize: 50, fontWeight: FontWeight.bold, ), )
如果确实需要在内容变化时修改输入内容(比如格式化手机号),记得同步设置光标位置,避免光标错位问题。
内容的提问来源于stack exchange,提问作者EBENEZER OCANSEY
相关产品推荐
相关产品推荐

