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

flu*_*ter 6 dart flutter

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

Gün*_*uer 8

() => expression() { statements }创建一个闭包或内联函数。

这样,您可以内联创建一个函数,该函数作为传递给参数onPressed的小部件在事件发生时被调用。

expressionstatements有在其中创建它们可用,并且可以访问和使用所有可用的成员和标识符在这方面的背景(变量,方法,功能,类型定义,...)。

如果您使用

  • onPressed: myFunction传递对现有函数的引用。
    仅当onPressed和预期的回调参数myFunction兼容时,此方法才有效。
  • onPressed: myFunction() myFunction()执行,并将返回的结果传递给onPressed。这是一个普遍的错误,当无意间实际上是要传递引用myFunction而不是调用它时,就会犯错。

  • 只有一处不同。`onPressed: myFunction` 将函数 `myFunction` 的引用(指针)传递给 `onPressed` 参数。附加的“()”会导致执行“myFunction”,并将“myFunction()”的*返回值*传递给“onPressed”,这通常不是您想要的。 (7认同)

Din*_*ian 7

如果我正确理解您的问题,那么您是在询问粗体() => function()。

有了这个假设,我试图回答。

onTap, onPressed 是function作为参数的。可能的值可以是

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
Run Code Online (Sandbox Code Playgroud)

  • onTap:callbackFunction 和 onTap:() =>callbackFunction() 之间有什么区别? (3认同)

use*_*442 6

它们不是同一件事。根据语言文档,粗箭头是 return 语句的语法糖。

https://www.dartlang.org/guides/language/language-tour#functions

() => function()
Run Code Online (Sandbox Code Playgroud)

与这条线相当

(){ return function(); }
Run Code Online (Sandbox Code Playgroud)

不是这个声明

() { function(); } //returns void
Run Code Online (Sandbox Code Playgroud)

我猜你逃脱了它,因为两个处理程序都有无效的倾向。

https://docs.flutter.io/flutter/dart-ui/VoidCallback.html

https://docs.flutter.io/flutter/gestures/GestureTapCallback.html

https://docs.flutter.io/flutter/material/ListTile/onTap.html

https://docs.flutter.io/flutter/material/IconButton/onPressed.html

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));
  }
}
Run Code Online (Sandbox Code Playgroud)