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; }); }
关键修正点
- 逻辑反转:把原代码中的
element.toLowerCase().contains(product.name!.toLowerCase())改为product.name!.toLowerCase().contains(element.toLowerCase()),确保是商品名称包含关键词,而非关键词包含商品名称。 - 过滤空关键词:添加
.where((k) => k.isNotEmpty)处理输入中的连续空格,避免空字符串导致所有商品被错误过滤。 - 语义优化:将
listString重命名为keywords,让代码可读性更强。
和旧版本的区别
你之前的代码是遍历每个关键词,把包含该关键词的商品全部追加到结果中,这会返回「包含任意单个关键词」的商品,甚至会出现重复数据(同一个商品含多个关键词时会被多次添加)。而修正后的代码通过every方法,强制要求商品名称必须包含所有关键词才会被纳入结果,完全匹配你的需求。
内容的提问来源于stack exchange,提问作者Przemysław Pluszowy
相关产品推荐
相关产品推荐

