You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter多关键词商品搜索问题:需匹配全部关键词的查询异常

多关键词商品搜索问题修复

你当前的代码逻辑写反了,导致无法返回正确结果。要实现「仅返回名称包含所有拆分关键词的商品」,核心是检查商品名称是否包含每个关键词,而不是反过来检查关键词是否包含商品名称。

修正后的代码

void search(String value) {
  List<Product> searchList = [];
  // 拆分关键词并过滤空字符串(避免连续空格导致的无效关键词)
  List<String> keywords = value.split(' ').where((k) => k.isNotEmpty).toList();
  
  // 筛选出名称包含所有关键词的商品
  searchList.addAll(_listToSearch
      .where((product) => keywords.every((keyword) =>
          product.name!.toLowerCase().contains(keyword.toLowerCase())))
      .toList());

  setState(() {
    _listToShow = searchList;
  });
}

关键修正点

  1. 逻辑反转:把原代码中的element.toLowerCase().contains(product.name!.toLowerCase())改为product.name!.toLowerCase().contains(element.toLowerCase()),确保是商品名称包含关键词,而非关键词包含商品名称。
  2. 过滤空关键词:添加.where((k) => k.isNotEmpty)处理输入中的连续空格,避免空字符串导致所有商品被错误过滤。
  3. 语义优化:将listString重命名为keywords,让代码可读性更强。

和旧版本的区别

你之前的代码是遍历每个关键词,把包含该关键词的商品全部追加到结果中,这会返回「包含任意单个关键词」的商品,甚至会出现重复数据(同一个商品含多个关键词时会被多次添加)。而修正后的代码通过every方法,强制要求商品名称必须包含所有关键词才会被纳入结果,完全匹配你的需求。

内容的提问来源于stack exchange,提问作者Przemysław Pluszowy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 22:07:01