我知道在onPressed
和onTap
之后为小部件调用函数的语法。有两个选项,我们可以使用() => function()
或() { function(); }
语法。空括号是什么意思?
答案 0 :(得分:5)
() => expression
或() { statements }
创建一个闭包或内联函数。
通过这种方式,您可以内联创建一个函数,该函数将作为参数传递给事件onPressed
,以将事件传递给该函数。
expression
或statements
具有在其创建时可用的上下文,并且可以访问和使用该上下文中可用的所有成员和标识符(变量,方法,函数,typedef等)。
如果您使用
onPressed: myFunction
传递了对现有函数的引用。onPressed
和myFunction
期望的回调参数兼容的情况下才有效。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)
=>(胖箭头)语法对于包含单个语句的函数很方便。当将匿名函数作为参数传递时,此语法特别有用。