onPressed属性后面的空括号在Dart中是什么意思?

onPressed属性后面的空括号在Dart中是什么意思?,dart,flutter,Dart,Flutter,我知道在小部件的onPressed和onTap之后调用函数的语法。有两个选项可以使用()=>function()或(){function();}语法。空括号是什么意思?=>(胖箭头)语法对于包含单个语句的函数非常方便。此语法在将匿名函数作为参数传递时特别有用。我已经学会了先将空括号视为构建,然后使用返回值执行此函数 我使用您发布的第二种方法遇到了一个问题,其中flutter将崩溃,声明“无法构建,因为框架已经在构建”,并在StackOverflow上找到了这篇文章,这可能会让您更好地理解它的含义

我知道在小部件的
onPressed
onTap
之后调用函数的语法。有两个选项可以使用
()=>function()
(){function();}
语法。空括号是什么意思?

=>(胖箭头)语法对于包含单个语句的函数非常方便。此语法在将匿名函数作为参数传递时特别有用。

我已经学会了先将空括号视为构建,然后使用返回值执行此函数

我使用您发布的第二种方法遇到了一个问题,其中flutter将崩溃,声明“无法构建,因为框架已经在构建”,并在StackOverflow上找到了这篇文章,这可能会让您更好地理解它的含义。
它们不是一回事。 根据语言文档,胖箭头是return语句的语法糖

与这条线相当

(){ return function(); }
不是这句话

() { function(); } //returns void
我猜你侥幸逃脱了,因为两个处理者都有一种空虚的倾向

void main(){
num add(a,b)=>a+b;
num add_void(a,b){a+b;}
对于(int i=0;i<5;i++){
打印('hello${i+1}');
打印(添加(i,i));
打印(添加(i,i));
}
}
()=>表达式
(){statements}
创建闭包或内联函数

通过这种方式,您可以创建一个内联函数,该函数作为参数传递,以便在事件
onPressed
被传递给的小部件时调用

表达式
语句
具有创建它们的上下文,并且可以访问和使用该上下文中可用的所有成员和标识符(变量、方法、函数、typedef等)

如果你使用

  • onPressed:myFunction
    传递对现有函数的引用。
    这仅在
    onPressed
    myFunction
    预期的回调参数兼容时才有效
  • onPressed:myFunction()
    myFunction()
    被执行,返回的结果被传递给
    onPressed
    。这是一个常见的错误,如果无意中这样做,实际上是为了传递对
    myFunction
    的引用,而不是调用它

如果我正确理解您的问题,您是在询问粗体的函数

我正试图回答这个假设

onTap、onPressed是将
函数
作为参数的函数。可能的值可以是

func callbackFunction() {
 // what ever we want to do onTap
}

1. onTap: callbackFunction

2. onTap: () => callbackFunction() // onTap: callbackFunction() it will invoke the method while building itself. 
                                   // So we are making it lazy by wrapping in another anonymous function. 

3. onTap: () { callbackFunction(); }

4. onTap: () => print("tapped")   // anonymous one line function

5. onTap: () { print("tapped"); 
               // what ever we want to do onTap
               print("tapped"); 
           }   // anonymous multiline function

您可以使用
onTap:function
too您能解释一下onPressed:myFunction和onPressed:myFunction()之间的区别吗?我现在还赶不上。谢谢你,只有一点不同
onPressed:myFunction
将指向函数
myFunction
的引用(指针)传递给
onPressed
参数。附加的
()
会执行
myFunction
,并将
myFunction()
的返回值传递给
onPressed
,这通常不是您想要的。感谢@GünterZöchbauer在这么多SOF问题上的帮助!onTap:callbackFunction和onTap:()=>callbackFunction()之间有什么区别?没有区别,使用这两种方法您将创建“callbackFunction”(参数类型函数)
void main() {
  num add(a,b) => a + b;
  num add_void(a,b) { a+b; }
  for (int i = 0; i < 5; i++) {
    print('hello ${i + 1}');
    print(add(i,i));
    print(add_void(i,i));
  }
}
func callbackFunction() {
 // what ever we want to do onTap
}

1. onTap: callbackFunction

2. onTap: () => callbackFunction() // onTap: callbackFunction() it will invoke the method while building itself. 
                                   // So we are making it lazy by wrapping in another anonymous function. 

3. onTap: () { callbackFunction(); }

4. onTap: () => print("tapped")   // anonymous one line function

5. onTap: () { print("tapped"); 
               // what ever we want to do onTap
               print("tapped"); 
           }   // anonymous multiline function