flutter Textfield在iOS設(shè)備上輸入中文時(shí)的問題

業(yè)務(wù)問題日常記錄
需求:在輸入文字時(shí),實(shí)時(shí)調(diào)接口搜索對應(yīng)內(nèi)容
問題:輸入中文時(shí),在輸入字母拼音時(shí)onChanged:方法在iOS上會實(shí)時(shí)回調(diào),拼音也會被搜索。如果輸入過快,由于接口異步回調(diào)導(dǎo)致內(nèi)容展示異常。
解決思路:
1,在請求時(shí)取消上次的請求,只進(jìn)行最后一次搜索。參考CancelToken 配合dio使用。需進(jìn)行各種臨界判斷。
2,后端接口返回?cái)?shù)據(jù)時(shí)帶上搜索的關(guān)鍵字,比對當(dāng)前輸入框內(nèi)容和關(guān)鍵字,不匹配則舍棄不顯示。保證顯示最后一次搜索內(nèi)容。
3,輸入中文時(shí)限制字母拼音在輸入框內(nèi)的顯示,待選擇中文后再顯示,此時(shí)回調(diào)onChanged:方法保證搜索一次,參考https://juejin.cn/post/6844904096407765005。有點(diǎn)麻煩。
4,使用dart自帶屬性isComposingRangeValid。方法:

onChanged: (value) {
    if (_textFieldController.value.isComposingRangeValid) {
         return;
     }
     doSearch(str);
 }
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容