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

时间:2018-09-19 10:52:28

标签: dart flutter

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

5 个答案:

答案 0 :(得分:5)

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

通过这种方式,您可以内联创建一个函数,该函数将作为参数传递给事件onPressed,以将事件传递给该函数。

expressionstatements具有在其创建时可用的上下文,并且可以访问和使用该上下文中可用的所有成员和标识符(变量,方法,函数,typedef等)。

如果您使用

  • onPressed: myFunction传递了对现有函数的引用。
    仅在onPressedmyFunction期望的回调参数兼容的情况下才有效。
  • onPressed: myFunction() myFunction()被执行,返回的结果被传递到onPressed。这是一个常见的错误,当无意间执行时实际上是要传递对myFunction的引用而不是调用它。

答案 1 :(得分:2)

他们不是一回事。 根据语言文档,胖箭头是return语句的语法糖。

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

() => function()

与该行相当

(){ return function(); }

不是此声明

() { function(); } //returns void

我想您已经放弃了,因为这两个处理程序都趋向于无效。

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));
  }
}

答案 2 :(得分:2)

如果我正确理解了您的问题,那么您正在询问的是粗体的() => 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

答案 3 :(得分:1)

我已经学会了首先将空括号作为内部版本,然后使用返回的值执行此功能。

我使用您发布的第二种方法遇到了一个问题,即颤振会崩溃,指出“由于框架已经在构建,因此无法构建” ,并在StackOverflow上找到了这篇文章,可能会为您提供一个更好的主意这是什么意思。 Flutter - Cannot build because the frawework is already building

答案 4 :(得分:0)

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