業(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);
}