范围模型-接收者:闭包:({dynamic formData})=>函数'login'中的void

时间:2019-02-08 15:09:36

标签: dart flutter

我正在尝试实现ScopedModel,我有类似这样的代码示例,没有任何问题,但是当我尝试实现相同的算法时,我遇到了错误。这是您需要的东西:

登录按钮代码块:

void _submitForm(Function authenticate) async {
    _formKey.currentState.save();
    print(_formData);
    http.Response response = await authenticate(_formData);
  }

作用域模型登录代码块:

void login({Map<String, dynamic> formData}) async {
    http.Response response = await http.post(
      url,
      body: formData,
    );
    print(response.body);
  }

onPressed代码:

onPressed: () => _submitForm(model.login),

错误:

NoSuchMethodError: Closure call with mismatched arguments: function '_MainModel&Model&ConnectedModel&AuthModel.login'
E/flutter (13496): Receiver: Closure: ({dynamic formData}) => void from Function 'login':.
E/flutter (13496): Tried calling: _MainModel&Model&ConnectedModel&AuthModel.login(_LinkedHashMap len:3)
E/flutter (13496): Found: _MainModel&Model&ConnectedModel&AuthModel.login({dynamic formData}) => void

我试图更改方法的类型,等等。一切正常。

我愿意通过范围模型来实现不同的实现方式。

1 个答案:

答案 0 :(得分:1)

错误是因为您正在将需要参数的函数传递给需要没有参数的函数的方法。

尝试一下:

void _submitForm(Function(Map<String, dynamic>) authenticate) async {
  _formKey.currentState.save();
  print(_formData);
  http.Response response = await authenticate(_formData);
}

我可能是错的,但我认为您不能传递包含命名参数的函数,因此您的作用域模型代码必须为:

void login(Map<String, dynamic> formData) async {
  http.Response response = await http.post(
    url,
    body: formData,
  );
  print(response.body);
}