当前位置: 首页 > 知识库问答 >
问题:

省道-筛选对象列表的行为意外...不知何故,所有的对象都包含一个字符串

邓禄
2023-03-14

当我试图过滤列表时,我得到了非常奇怪的行为。这让我措手不及,因为我在其他语言中已经无数次这样做了,以前从未见过这种行为。

  List<Product> getFilteredProducts(String searchTerm){
    print('getting filtered products');
    List<Product> products = ProductsRepository.loadProducts(Category.all);
    print('Search term used: ' + searchTerm);
    List<Product> filteredProducts = products.where((product) => (product.name.contains(searchText))).toList();
    print(filteredProducts.map((prod) => prod.name));
    print(products.map((prod) => prod.name.contains(searchText))); // sanity check
    return filteredProducts;
  }
I/flutter ( 8401): getting filtered products  
I/flutter ( 8401): Search term used: Stella  
I/flutter ( 8401): (Vagabond sack, Stella sunglasses, Whitney belt, ..., Sunshirt dress, Fine lines tee)  
I/flutter ( 8401): (true, true, true, true, true, true, true, true, true, true, ..., true, true)
class ProductsRepository {
  static List<Product> loadProducts(Category category) {
    List<Product> allProducts = <Product> [
      Product(
        category: Category.accessories,
        id: 0,
        isFeatured: true,
        name: 'Vagabond sack',
        price: 120,
      ),
      Product(
        category: Category.accessories,
        id: 1,
        isFeatured: true,
        name: 'Stella sunglasses',
        price: 58,
      ),
      Product(
        category: Category.accessories,
        id: 2,
        isFeatured: false,
        name: 'Whitney belt',
        price: 35,
      ),
      Product(
        category: Category.accessories,
        id: 3,
        isFeatured: true,
        name: 'Garden strand',
        price: 98,
      ),
      Product(
        category: Category.accessories,
        id: 4,
        isFeatured: false,
        name: 'Strut earrings',
        price: 34,
      ),
      Product(
        category: Category.accessories,
        id: 5,
        isFeatured: false,
        name: 'Varsity socks',
        price: 12,
      ),
      Product(
        category: Category.accessories,
        id: 6,
        isFeatured: false,
        name: 'Weave keyring',
        price: 16,
      ),
      Product(
        category: Category.clothing,
        id: 36,
        isFeatured: false,
        name: 'Sunshirt dress',
        price: 58,
      ),
      Product(
        category: Category.clothing,
        id: 37,
        isFeatured: true,
        name: 'Fine lines tee',
        price: 58,
      ),
    ];
    if (category == Category.all) {
      return allProducts;
    } else {
      return allProducts.where((Product p) {
        return p.category == category;
      }).toList();
    }
  }
}

以下是我的依赖关系:

environment:
  sdk: ">=2.7.0 <3.0.0"

dependencies:
  flutter:
    sdk: flutter
  intl: ^0.15.6

  cupertino_icons: ^0.1.0
  shrine_images: 1.1.1
  provider: ^4.0.0

共有1个答案

劳法
2023-03-14

您正在传递SerchTerms,但使用SearchText进行筛选。

试试这个:

List<Product> getFilteredProducts(String searchTerm){
    print('getting filtered products');
    List<Product> products = ProductsRepository.loadProducts(Category.all);
    print('Search term used: ' + searchTerm);
    List<Product> filteredProducts = products.where((product) => (product.name.contains(searchTerm))).toList();
    print(filteredProducts.map((prod) => prod.name));
    print(products.map((prod) => prod.name.contains(searchTerm))); // sanity check
    return filteredProducts;
  }
 类似资料:
  • 问题内容: 好的,这是一个棘手的问题。我有一套清单。我想按顺序对集合中的对象进行排序。 想象每个场景都压抑着学校的一堂课。每个集合包含人物对象。人员对象具有名称的字符串值。在遍历并写下来之前,我想按名称排列集合中的人物。 是否有任何使用或类似的方法可以实现此目的? 我确实知道班上2个以上的孩子可能使用相同的名字,但请忽略此 问题答案: A 没有 排序的 概念,因为它是一个集合。 您可以使用按类实现

  • 我正在处理5个自定义对象,需要能够将它们保存(序列化)到文件中,并在以后重新加载它们。所有对象都实现可序列化,我可以单独保存和重新加载它们。 这个程序基本上是在模仿关系数据库,但是我不能使用实际的数据库。 我的潜在问题是,一个或两个对象包含其他对象。从我的测试来看,子对象似乎全部保存在主对象中。 ... 当一个foo1对象被反序列化时,它会正确地重新创建自己,包括任何foo2对象。 然而,我认为f

  • 很抱歉标题太长,但我的问题如下; 我有这些课程; 和 和 如果只有断言它拥有的列表,我会使用以下自定义匹配器;

  • 我有一个对象的arraylist,其中有一个字段“name”,还有一个名称列表。我必须从列表中选择包含任何名称的所有对象。如何在java中最有效地实现这一点。任何代码片段都将受到高度赞赏。 例子: 让类名为 A由id、name、subject等字段组成。 那么让我们假设我有一个列表 所以假设我有第二个列表 因此,我只想从objectsA列表中选择那些名称字段由名称列表中的名称组成的对象,也就是说,

  • 然后是班级选拔: 教材: 因此,我主要创建新用户并将其序列化: 一切都很完美,但如果我这样做: 然后我想序列化对象用户,程序崩溃了。我得到的结果是: JAVA木卫一。NotSerializableException:在java上。木卫一。ObjectOutputStream。java上的WriteObject 0(ObjectOutputStream.java:1183)。木卫一。ObjectOu

  • 我正在尝试有这样的方法签名:public static List FilterList(List collection,String FilterString,String Property=“”) 这样,我可以从任何地方调用这个方法,并传递给它任何列表,它将返回给我一个过滤的列表。