以下代码片段向我显示了一个错误,即:“参数类型‘List Function()’不能分配给参数类型‘List’。”
home:Scaffold(
body:Column(
children: (){
List <Widget> w=[];
for(int i=0;i<str.length;i++){
w.add(Text(str[i]));
}
return w;
},
当我像这样改变它时:
home:Scaffold(
body:Column(
children: (){
List <Widget> w=[];
for(int i=0;i<str.length;i++){
w.add(Text(str[i]));
}
return w;
}(),// <- Notice the () at the end here
当我在匿名函数中包含最后两个“()”时,编译器没有显示错误。到底发生了什么?最后那两个括号是什么意思?为什么错误被解除,后台发生了什么?
在 Dart 中,将 () 放在函数调用之后会立即调用该函数。这称为“调用”函数。
Column 小部件的 Children 属性需要一个小部件列表(List)。但是,在原始代码中,您传递的是函数 () {} 而不是列表。通过在函数末尾添加 (),您可以立即调用它,这将返回children 属性所期望的小部件列表。
因此,本质上,通过在函数末尾添加 () ,您可以将函数本身转换为一个值(函数调用的结果),在本例中是一个 List,正如 Children 属性所期望的那样。
因此,错误已解决,因为现在您正在将 List 传递给 Children 属性,该属性与预期类型匹配。