forEach当返回值时在函数中使用项目的循环时,我收到以下错误。
bool validatedValues(List<String> values){
values.forEach((i){
if (i.length > 3){
return true;
}
});
return false;
}
Run Code Online (Sandbox Code Playgroud)
我使用 dart null safety sdk 版本:">=2.12.0 <3.0.0"
完整错误:
The return type 'bool' isn't a 'void', as required by the closure's context.dartreturn_of_invalid_type_from_closure
Run Code Online (Sandbox Code Playgroud) 示例代码
Map<String,String> gg={'gg':'abc','kk':'kojk'};
Future<void> secondAsync() async {
await Future.delayed(const Duration(seconds: 2));
print("Second!");
gg.forEach((key,value) async{await Future.delayed(const Duration(seconds: 5));
print("Third!");
});
}
Future<void> thirdAsync() async {
await Future<String>.delayed(const Duration(seconds: 2));
print('third');
}
void main() async {
secondAsync().then((_){thirdAsync();});
}
Run Code Online (Sandbox Code Playgroud)
输出
Second!
third
Third!
Third!
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我想用来等待地图的 foreach 循环完成然后我想打印third
预期的输出
Second!
Third!
Third!
third
Run Code Online (Sandbox Code Playgroud) 是否有一种惯用的方法将函数应用于列表中的所有项目?
例如,在 Python 中,假设我们希望将列表中的所有字符串大写,我们可以使用循环:
regimentNames = ['Night Riflemen', 'Jungle Scouts', 'The Dragoons', 'Midnight Revengence', 'Wily Warriors']
# create a variable for the for loop results
regimentNamesCapitalized_f = []
# for every item in regimentNames
for i in regimentNames:
# capitalize the item and add it to regimentNamesCapitalized_f
regimentNamesCapitalized_f.append(i.upper())
Run Code Online (Sandbox Code Playgroud)
但更简洁的方法是:
capitalizer = lambda x: x.upper()
regimentNamesCapitalized_m = list(map(capitalizer, regimentNames)); regimentNamesCapitalized_m
Run Code Online (Sandbox Code Playgroud)
在 Dart 中对列表中的所有项目调用函数的等效方法是什么?
我想要一个 list.forEach 和 if forEach ,当这个 if 返回 true 时我想像这样打破这个代码
list.forEach((element){
if(element == "a"){
break
}
})
Run Code Online (Sandbox Code Playgroud)
但这没有帮助。