You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 07:05:23