以下 _TypeError 被抛出构建 TestClass(dirty, dependencies:

Posted

技术标签:

【中文标题】以下 _TypeError 被抛出构建 TestClass(dirty, dependencies:【英文标题】:The following _TypeError was thrown building TestClass(dirty, dependencies: 【发布时间】:2017-12-21 22:35:12 【问题描述】:

我正在尝试根据食品类别过滤食品,但不断收到以下错误。 我们的想法是使用 Provider 包为我选择的类别手动传递一个字符串,然后过滤并打印与包含食品的列表中的类别匹配的项目。

 I/flutter ( 7404): ══╡ EXCEPTION CAUGHT BY WIDGETS LIBRARY ╞═══════════════════════════════════════════════════════════
I/flutter ( 7404): The following _TypeError was thrown building TestClass(dirty, dependencies:
I/flutter ( 7404): [_InheritedProviderScope<DummyData>]):
I/flutter ( 7404): type 'WhereIterable<Products>' is not a subtype of type 'List<Products>'

这是虚拟数据的 sn-p,其中我分别在名为 categories 和 products 的列表中定义了类别和食品。我很确定最后的过滤器没有很好地定义。

    class DummyData with ChangeNotifier 

  List<Categories> categories = [
    Categories(
        catId: '1',
        title: 'American',
        imageUrl: 'https://www.recipetineats.com/wp-content/uploads/2016/02/Beef-Hamburgers_7-2.jpg?w=500&h=500&crop=1'
    ),
    Categories(
        catId: '2',
        title: 'North Indian',
        imageUrl: 'https://static.toiimg.com/thumb/53205522.cms?width=1200&height=1200'
    ),
    Categories(
        catId: '3',
        title: 'Chinese',
        imageUrl: 'https://uploads-ssl.webflow.com/5c481361c604e53624138c2f/5c6cd55ca1bcb14248ded5c4_chilli-pork-website-thumbnail-.png'
    ),
  ];

  List<Products> products = [
    
    Products(
        id: '1',
        name: 'Mac & Cheese',
        preparationTime: '30 mins',
        imageUrl: 'https://www.inspiredtaste.net/wp-content/uploads/2018/10/Easy-Creamy-Stovetop-Mac-and-Cheese-1200.jpg',
        category: 'American'
    ),
    Products(
        id: '2',
        name: 'Hamburger',
        preparationTime: '30 mins',
        imageUrl: 'https://www.recipetineats.com/wp-content/uploads/2016/02/Beef-Hamburgers_7-2.jpg?w=500&h=500&crop=1',
        category: 'American'
    ),
    Products(
        id: '3',
        name: 'Chilli Pork',
        preparationTime: '1 Hr',
        imageUrl: 'https://uploads-ssl.webflow.com/5c481361c604e53624138c2f/5c6cd55ca1bcb14248ded5c4_chilli-pork-website-thumbnail-.png',
        category: 'Chinese'
    ),
    Products(
        id: '4',
        name: 'Fried Rice',
        preparationTime: '15 mins',
        imageUrl: 'https://www.saveur.com/resizer/lijLVB5tWYhp-81mavFmDDxy_Xo=/600x600/arc-anglerfish-arc2-prod-bonnier.s3.amazonaws.com/public/SITSUSMWR7A2IQ64GMSPSIOOQE.jpg',
        category: 'Chinese'
    ),
    Products(
        id: '4',
        name: 'Butter Chicken',
        preparationTime: '1 Hr',
        imageUrl: 'https://static.toiimg.com/thumb/53205522.cms?width=1200&height=1200',
        category: 'North Indian'
    ),
    Products(
        id: '5',
        name: 'Chicken Tikka Masala',
        preparationTime: '1 Hr',
        imageUrl: 'https://i2.wp.com/spicecravings.com/wp-content/uploads/2017/08/Palak-Paneer-5-500x500.jpg',
        category: 'North Indian'
    ),
  List<Categories> get categoryType 
    return [...categories];
  

  List<Products> get food 
    return[...products];
  

  List<Products> filter(String title) 
    return products.where((element) => element.category == title);
  

【问题讨论】:

请阅读:Under what circumstances may I add “urgent” or other similar phrases to my question, in order to obtain faster answers? 当您在调试器中单步执行此操作时,代码和运行时变量值的行为与您的预期有何不同? 变量str只显示第一个单词,for循环在提取第一个字符串后不再迭代。我认为这就是问题所在。你认为你能帮忙吗??? 【参考方案1】:

我认为这个问题已经得到解答。但与其遍历字符串的字符,不如使用标准 Java 库,如下所示:

name = in.readLine();
if (name != null && !"".equals(name)) 
    String[] arr = name.split("\\s+");
    for (int i = 0; i < arr.length; i++)
        System.out.println(arr[i]);

split() 方法可以完成您尝试自己编程的工作。 字符串\\s+ 是一个表示一个或多个空格字符(空格、换行符、...)的正则表达式。您也可以改用" ",但在这种情况下,您的输入只能包含一个空格字符。

例子:

System.out.println("输入名称");

输入:

firstname secondname         lastname

输出:

firstname
secondname
lastname

【讨论】:

非常感谢,但如果您同意的话,您能否指出我的代码中哪里出错了??? 不客气。实际上,代码看起来还可以。但问题是当你到达输入的末尾时。在那一点上,您已经到达&lt;last_position&gt; = names.length() 的位置。因为这个&lt;last_position&gt;不小于 names.length(),所以在分配最后一个单词之前离开循环。因此,您可以在循环后添加strif (str != null &amp;&amp; !"".equals(str)) arr[k] = str;【参考方案2】:

当你第一次循环结束时,str 变量中有最后一个单词。

您需要在循环后添加arr[k++] = str; 才能将其放入数组中。

【讨论】:

是的。就在` for(int i = 0; i

以上是关于以下 _TypeError 被抛出构建 TestClass(dirty, dependencies:的主要内容,如果未能解决你的问题,请参考以下文章

ProviderNotFoundException 在构建 ConsumptionDialog 时被抛出,因为使用了不包含提供者的`BuildContext`

Mongoose TypeError:用户不是构造函数

另一个异常被抛出:多个小部件使用相同的 GlobalKey

为啥重新定义 __getattr__() 的对象会抛出 TypeError?

FileNotFoundException 有时会被抛出,我不知道为啥

为啥 binned_statistic_2d 现在抛出 TypeError?