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
相关产品推荐
相关产品推荐

