Flutter-解决搜索时数据错乱的问题

蒋琬
• 阅读 2372

Flutter-解决搜索时数据错乱的问题

春风得意马蹄疾
一日看尽长安花

前言

Flutter-解决搜索时数据错乱的问题

问题描述
搜索框中快速输入和删除文本时,在不停的发送网络请求

问题解决
解决发送多条网络请求,数据回调正常

解决思路

利用iOS中搜索的思想,
在每个网络请求中带上搜索的keyword
把keyword当作搜索结果model的属性
在每次的model返回时判断当前的属性和最后一次的搜索keyword是否一致
一致就刷新数据,否则就丢弃数据

代码实现

    // 输入框的改变事件
    _onSearch(String text) {
        // _searchText全局的属性,用来保存每次搜索输入的内容
        _searchText = text;
        if (text == null || text.isEmpty) { // 如果没有搜索内容为空则把数据源置为空
          _searchResult = [];
          setState(() {});
        } else {// 如果有搜索内容则发送网络请求
          fetchSearchSuggestionData(text);
        }
      }
      // 发送网络请求
      Future fetchSearchSuggestionData(String keyward) async {
        await SearchSuggestionDao.fetchSearchSuggestion('', keyward).then((model) {
          // 判断每次搜索回调的数据key和最后一次的搜索_searchText是否一致 (重点)
          if (model.keyword == _searchText) {
            _searchResult = model.districtAndLandmark;
            setState(() {});
          } // 防止数据错乱
        });
      }
      
      
      static Future<SearchSuggestionModel> fetchSearchSuggestion(String cityId,String keyWord) async {
        Response response =
            await DioGo.get(Url.getUrl(SearchSuggestionUrl), params: {'cityId': cityId,'keyWord': keyWord});
        if (response.isSuccess() && response.data != null) {
          try {
            SearchSuggestionModel model =
                SearchSuggestionModel.fromJson(response.data['content']);
            model.keyword = keyWord;// 在搜索model中保存搜索key
            return model;
          } catch (error) {
            return null;
          }
        } else {
          return null;
        }
      }
点赞
收藏
评论区
推荐文章
blmius blmius
3年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
添砖java的啾 添砖java的啾
3年前
distinct效率更高还是group by效率更高?
目录00结论01distinct的使用02groupby的使用03distinct和groupby原理04推荐groupby的原因00结论先说大致的结论(完整结论在文末):在语义相同,有索引的情况下groupby和distinct都能使用索引,效率相同。在语义相同,无索引的情况下:distinct效率高于groupby。原因是di
Stella981 Stella981
3年前
JS 苹果手机日期显示NaN问题
问题描述newDate("2019122910:30:00")在IOS下显示为NaN原因分析带的日期IOS下存在兼容问题解决方法字符串替换letdateStr"2019122910:30:00";datedateStr.repl
Stella981 Stella981
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Easter79 Easter79
3年前
SpringBoot整合Redis乱码原因及解决方案
问题描述:springboot使用springdataredis存储数据时乱码rediskey/value出现\\xAC\\xED\\x00\\x05t\\x00\\x05问题分析:查看RedisTemplate类!(https://oscimg.oschina.net/oscnet/0a85565fa
Stella981 Stella981
3年前
OFBiz 快速入门——续二
OFBiz快速入门——续二2011年03月17日星期四00:03OFBiz 快速入门2.5 创建一个文件,取名为(controller.xml),被OFBiz webapp控制器使用的。在没有额外增加功能时,这个文件内容非常的小与简单,如下:<?xml version"1.0" encoding"UTF8"?<siteco
Wesley13 Wesley13
3年前
Java日期时间API系列36
  十二时辰,古代劳动人民把一昼夜划分成十二个时段,每一个时段叫一个时辰。二十四小时和十二时辰对照表:时辰时间24时制子时深夜11:00凌晨01:0023:0001:00丑时上午01:00上午03:0001:0003:00寅时上午03:00上午0
Wesley13 Wesley13
3年前
MySQL部分从库上面因为大量的临时表tmp_table造成慢查询
背景描述Time:20190124T00:08:14.70572408:00User@Host:@Id:Schema:sentrymetaLast_errno:0Killed:0Query_time:0.315758Lock_
美凌格栋栋酱 美凌格栋栋酱
4个月前
Oracle 分组与拼接字符串同时使用
SELECTT.,ROWNUMIDFROM(SELECTT.EMPLID,T.NAME,T.BU,T.REALDEPART,T.FORMATDATE,SUM(T.S0)S0,MAX(UPDATETIME)CREATETIME,LISTAGG(TOCHAR(
飞龙AI 飞龙AI
3星期前
DevEcoStudio 中使用模拟器时如何过滤日志
DevEcoStudio中使用模拟器时如何过滤日志鸿蒙核心技术鸿蒙开发者工具DevEcoStudio在HilogSettingsFilter设置Logmessage:A03d00/JSAPP当你看到不断更新的日志时,你会不会崩溃因为Nofilters模式下