Dart中where闭包报错:返回Set<bool>而非bool问题求助
问题原因与解决方案
核心错误原因
你遇到的The return type 'Set<bool>' isn't a 'bool'错误,和Stateful Widget无关,也不是函数内部逻辑的问题——根源是Dart对箭头函数语法的解析规则:
当你写=> { ... }时,Dart会把大括号解析为Set字面量的创建语法,而不是函数体。比如(article) => { displayArticle(article) }实际上是返回了一个包含单个bool值的Set,而where方法要求闭包必须返回一个bool类型,因此触发类型不匹配错误。
修正方案
方案1:正确调用displayArticle函数
去掉箭头后的大括号,直接用箭头返回函数调用结果(单一表达式不需要大括号):
List<StoredArticle> articlessToDisplay = storedArticleObjs.where((article) => displayArticle(article)).toList();
方案2:直接在闭包内写逻辑(不用箭头函数)
如果要把逻辑写在闭包里,不要用箭头+大括号的组合,改用普通的闭包函数体写法:
List<StoredArticle> articlessToDisplay = storedArticleObjs.where((article) { if (article.week < 0) { return true; } DateTime now = DateTime.now(); DateTime janFirst = DateTime(now.year, 1, 1); int weekNum = (now.difference(janFirst).inDays / 7).ceil(); if(article.week == weekNum || article.week == (weekNum - 1)){ return true; } return false; }).toList();
额外说明
你修改displayArticle为单一return形式的操作是多余的,原函数的逻辑本身没有问题,只是调用时的语法错误导致了类型不匹配。Dart中箭头函数=>后面只能跟单个表达式,如果要写多行逻辑,必须用(param) { ... }的普通闭包写法,不能用=> { ... }。
内容的提问来源于stack exchange,提问作者S. Ke
相关产品推荐
相关产品推荐

