Flutter中的VoidCallback如何工作?

时间:2019-12-05 12:20:11

标签: flutter

  

我从互联网上的消息来源了解到, 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());
  }
}

2 个答案:

答案 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

设置自己的函数定义