以下 _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
【讨论】:
非常感谢,但如果您同意的话,您能否指出我的代码中哪里出错了??? 不客气。实际上,代码看起来还可以。但问题是当你到达输入的末尾时。在那一点上,您已经到达<last_position> = names.length()
的位置。因为这个<last_position>
是不小于 names.length()
,所以在分配最后一个单词之前离开循环。因此,您可以在循环后添加str
:if (str != null && !"".equals(str)) arr[k] = str;
。【参考方案2】:
当你第一次循环结束时,str
变量中有最后一个单词。
您需要在循环后添加arr[k++] = str;
才能将其放入数组中。
【讨论】:
是的。就在` for(int i = 0; i以上是关于以下 _TypeError 被抛出构建 TestClass(dirty, dependencies:的主要内容,如果未能解决你的问题,请参考以下文章
ProviderNotFoundException 在构建 ConsumptionDialog 时被抛出,因为使用了不包含提供者的`BuildContext`
为啥重新定义 __getattr__() 的对象会抛出 TypeError?