問題描述:
- 用ios原生自帶中文輸入法求晶,輸入時,中文無法正常輸入浊仆,輸入時會重復(fù)好多次客峭,并且顯示是中文的拼音字母,用中文全鍵盤效果更明顯抡柿;
- 英文輸入法不會有這種問題舔琅;
- 其它第三方輸入法,如百度輸入法沒有這種問題沙绝;
- 安卓沒發(fā)現(xiàn)這種問題搏明;
驗證代碼:
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自帶中文輸入法,在輸入拼音字母時闪檬,字母會先顯示在輸入框星著,輸入一個字母,就會回調(diào)一次onChanged方法粗悯,這時調(diào)用setState刷新虚循,就會把輸入的字母顯示有輸入框上,這時輸入的就不是中文样傍,而是中文的拼音字母了横缔。
- 第三方輸入法,是把整個中文輸入完成后衫哥,再顯示在輸入框上茎刚,也就是輸入一個完整中文后才回調(diào)onChanged方法;
解決方式:
方式1:
TextField的onChanged方法里不要用setState刷新撤逢;