代码之家  ›  专栏  ›  技术社区  ›  Varshan Manish

在Flutter中,匿名函数末尾的偏执意味着什么?

  •  0
  • Varshan Manish  · 技术社区  · 7 月前

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

    当我在匿名函数中包含最后两个“()”时,编译器没有显示任何错误。到底发生了什么?结尾那两个偏执意味着什么?为什么错误被取消,后台发生了什么?

    1 回复  |  直到 7 月前
        1
  •  0
  •   S_Anuj    7 月前

    在Dart中,在函数调用之后放置()会立即调用该函数。这就是所谓的“调用”函数。

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

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

    因此,该错误已得到解决,因为现在您正在将List传递给children属性,该属性与期望的类型相匹配。