问题描述:
- 用ios原生自带中文输入法,输入时,中文无法正常输入,输入时会重复好多次,并且显示是中文的拼音字母,用中文全键盘效果更明显;
- 英文输入法不会有这种问题;
- 其它第三方输入法,如百度输入法没有这种问题;
- 安卓没发现这种问题;
验证代码:
String value;
TextField(
controller: TextEditingController.fromValue(TextEditingValue(
text: value ?? '',
selection: TextSelection.fromPosition(TextPosition(
affinity: TextAffinity.downstream,
offset: (value ?? '').length)))),
onChanged: (v) {
setState(() {
value = v;
});
},
),
原因分析:
- ios自带中文输入法,在输入拼音字母时,字母会先显示在输入框,输入一个字母,就会回调一次onChanged方法,这时调用setState刷新,就会把输入的字母显示有输入框上,这时输入的就不是中文,而是中文的拼音字母了。
- 第三方输入法,是把整个中文输入完成后,再显示在输入框上,也就是输入一个完整中文后才回调onChanged方法;
解决方式:
方式1:
TextField的onChanged方法里不要用setState刷新;