flutter 在多个元素中搜索列表中的项目

qhhrdooz  于 2023-02-25  发布在  Flutter
关注(0)|答案(2)|浏览(141)

我有搜索字段过滤我的列表,它的工作很好,但我想过滤列表的多个元素
我的列表:

List<Product> _p = [
  Product(
   title : 'P1',
   info : 'just Football',
   seller : 'me',
  ),
  Product(
   title : 'P2',
   info : 'just Football',
   seller : 'other',
  ),
]

过滤法

List<Product> filterByText(text){
    return _p.where((element) =>
        element.title.contains(text) ||
        element.info.contains(text) ||
        element.seller.contains(text)
  ).toList();
}

当我在TextFormField中输入Football other时,我想得到这个项目:

Product(
 title : 'P2',
 info : 'just Football',
 seller : 'other',
),

相反,它返回一个空列表。当我只输入other时,它工作正常。我如何通过一个字符串过滤多个元素?

zzlelutf

zzlelutf1#

有很多方法可以做到这一点。我只介绍一种方法:
可以像这样实现ProducttoString()方法:

@override
String toString() {
  return '$title $info $seller'; // You can add other fields here if needed.
}

现在,为filterByText实现一个模糊搜索,为此,可以使用https://pub.dev/packages/fuzzywuzzy这样的现有包。

List<Product> filterByText(text) {
  return extractTop(
    query: text,
    choices: _p,
    cutoff: 10, // You can choose another cutoff
    // You can choose another number of results
    // or show all using a different method
    limit: 4,
    getter: (x) => x.toString(),
  ).map((result) => result.choice).toList();
}

你不一定要实现toString(),你也可以直接在extractTop的getter字段中写入'${x.title} ${x.info} ${x.seller}'

5q4ezhmt

5q4ezhmt2#

您可以将最初的搜索查询分解为单词,然后搜索所有的单词。最后合并结果。

String searchQuery = 'Some Query With Multiple Words';
List<String> queryWords = searchQuery.split(' ');
List<Product> results = [];
for(String word in queryWords){
  final filterResult = filterByText(word);
  results.addAll(filterResult);
}

results = results.toSet().toList(); // to remove duplicates

请确保为类Product重写==
这可能会进一步帮助您:multiple word search in flutter

相关问题