我从互联网上的消息来源了解到, VoidCallback() 是不带参数且不返回参数的函数。 以下代码来自某个应用程序,并且该应用程序运行正常,我想问一下将VoidCallback用作类型而不是 function 的原因是什么? / p>
我绝对是Flutter开发的初学者,请指导我。
class LoginPage extends StatefulWidget {
final BaseAuth auth;
final VoidCallback onSignedIn;
LoginPage(this.auth);
@override
State<StatefulWidget> createState() {
// TODO: implement createState
return (_LoginPageState());
}
}
答案 0 :(得分:2)
Typedef用于避免丢失类型信息,但是VoidCallback确实没有丢失任何内容,但是您只知道这是因为它是VoidCallback。如果只是Function
,您可能最终会尝试从中获取价值。这是我们和编译器的实用程序。
Typedef为工具和开发人员提供有用的信息。
您可以检出the language tour以获得更多信息。
答案 1 :(得分:1)
VoidCallback IS无效函数:
typedef VoidCallback = void Function();
VoidCallback是不带参数且不返回参数的函数
功能是所有功能类型的基类。
从技术上讲,您可以做到
//instead of
final VoidCallback onSignedIn;
// could call this
final Function onSignedIn;
但是如果要传递特定功能。假设函数不带任何参数或不返回任何东西,VoidCallback将是更好的选择,因为它会检查类型。
class A {
final Function function;
A(this.function){
function("test"); // gonna print test
}
}
class B {
final VoidCallback voidCallback;
B(this.voidCallback){
voidCallback(); // gonna run void function
}
}
String getString(String value) {
print(value);
return value;
}
void main() {
A(getString);
B(getString); //The argument type 'String Function(String)' can't be assigned to the parameter type 'void Function()'
}
您还可以使用typedef
设置自己的函数定义