Flutter TextField onChanged失效,输入无显示问题求助
我用以下Flutter代码实现TextField功能,但点击模拟器键盘输入时,TextField中完全没有内容显示,尝试了多种方法都没解决,求帮助。
相关代码
TextField组件代码:
TextField( controller: nicknameController, onChanged: (value) { textFieldState.isNotEmptyText(value); }, onTap: () => textFieldState.onClick(), onTapOutside: (event) { textFieldState.onClick(); FocusScope.of(context).unfocus(); }, decoration: InputDecoration( focusedBorder: UnderlineInputBorder( borderSide: BorderSide(color: MaeumGaGymColor.blue500), ), label: PtdTextWidget.regular( '닉네임', 20, MaeumGaGymColor.gray400), ), ),
状态管理相关代码:
void isNotEmptyText(String text) { if (text == '') { _isText = false; } else { _isText = true; } notifyListeners(); }
可能的排查方向与解决方案
确认TextEditingController的初始化与状态:
先检查nicknameController是否在State类中正确初始化并绑定,示例初始化代码:late TextEditingController nicknameController; @override void initState() { super.initState(); nicknameController = TextEditingController(); } @override void dispose() { nicknameController.dispose(); super.dispose(); }同时排查
textFieldState.onClick()方法,确认没有执行nicknameController.clear()或类似清空输入内容的操作。排查状态更新的干扰:
临时注释掉onChanged回调中的textFieldState.isNotEmptyText(value),测试输入是否能正常显示。如果此时输入正常,说明状态管理的notifyListeners()触发了不必要的UI重建,导致TextField没有同步controller的最新内容,需要检查状态管理类的逻辑是否影响了TextField的渲染。检查自定义Label的样式冲突:
把PtdTextWidget.regular('닉네임', 20, MaeumGaGymColor.gray400)临时替换成默认Text组件:Text('닉네임', style: TextStyle(color: Colors.grey, fontSize: 20)),测试输入内容是否可见,排除自定义组件导致的文字颜色与背景色重合问题。排除焦点与回调的问题:
注释掉onTap和onTapOutside中的textFieldState.onClick(),只保留FocusScope.of(context).unfocus(),测试输入是否正常。如果恢复正常,说明onClick()方法内存在影响输入状态的逻辑,比如重置了状态变量或controller的值。排除模拟器适配问题:
切换模拟器的输入法,或者直接在真机上测试,排除模拟器本身的输入适配bug。
内容的提问来源于stack exchange,提问作者이재영

