Flutter 中匿名函数末尾的括号代表什么?

问题描述 投票:0回答:1

以下代码片段向我显示了一个错误,即:“参数类型‘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

当我在匿名函数中包含最后两个“()”时,编译器没有显示错误。到底发生了什么?最后那两个括号是什么意思?为什么错误被解除,后台发生了什么?

flutter dart oop
1个回答
0
投票

在 Dart 中,将 () 放在函数调用之后会立即调用该函数。这称为“调用”函数。

Column 小部件的 Children 属性需要一个小部件列表(List)。但是,在原始代码中,您传递的是函数 () {} 而不是列表。通过在函数末尾添加 (),您可以立即调用它,这将返回children 属性所期望的小部件列表。

因此,本质上,通过在函数末尾添加 () ,您可以将函数本身转换为一个值(函数调用的结果),在本例中是一个 List,正如 Children 属性所期望的那样。

因此,错误已解决,因为现在您正在将 List 传递给 Children 属性,该属性与预期类型匹配。

© www.soinside.com 2019 - 2024. All rights reserved.