业务问题日常记录
需求:在输入文字时,实时调接口搜索对应内容
问题:输入中文时,在输入字母拼音时onChanged:方法在iOS上会实时回调,拼音也会被搜索。如果输入过快,由于接口异步回调导致内容展示异常。
解决思路:
1,在请求时取消上次的请求,只进行最后一次搜索。参考CancelToken 配合dio使用。需进行各种临界判断。
2,后端接口返回数据时带上搜索的关键字,比对当前输入框内容和关键字,不匹配则舍弃不显示。保证显示最后一次搜索内容。
3,输入中文时限制字母拼音在输入框内的显示,待选择中文后再显示,此时回调onChanged:方法保证搜索一次,参考https://juejin.cn/post/6844904096407765005。有点麻烦。
4,使用dart自带属性isComposingRangeValid。方法:
onChanged: (value) {
if (_textFieldController.value.isComposingRangeValid) {
return;
}
doSearch(str);
}