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

Dart空安全迁移时forEach返回bool不符合void要求报错

报错原因

该报错与空安全迁移无关,是Dart中Iterable.forEach方法的语法约束导致的:

  • forEach要求传入的遍历闭包返回值类型为void,不允许返回任何具体类型的值。代码中return true;会让闭包返回bool类型值,与闭包上下文要求的void返回类型不匹配,因此触发类型错误。
  • forEach闭包内的return仅会退出当前次闭包执行,无法中断整个遍历流程,也无法将返回值传递到外层函数,你代码里的return true;本身不产生任何实际业务效果。
修复方式

直接删除无效的return true;语句即可,修复后符合语法规范的代码如下:

String sanitize(String input, List<String> possibleStart, List<String> possibleEnd) {
  final String start = possibleStart.join("|");
  final String end = possibleEnd.join("|");
  final RegExp exp = RegExp("(?<=$start)(.*?)(?=$end)");
  final Iterable<Match> matches = exp.allMatches(input);

  matches.forEach((match) {
    input = input.replaceFirst(match.group(0)!, match.group(0)!.replaceAll(",", "§").replaceAll(":", "ø").replaceAll("/", "å"));
  });
  return input;
}

补充说明:如果后续需要实现遍历到指定条件就终止循环的逻辑,不要使用forEach,改用普通for-in循环,或调用any/every等自带中断语义的迭代方法实现。

内容的提问来源于stack exchange,提问作者Nitneuq

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.31 00:31:04