参数类型 'Function' 无法分配给参数类型 'String?函数(字符串?)?在 dart2 之后

The argument type 'Function' can't be assigned to the parameter type 'String? Function(String?)? after dart2

我遇到错误

The argument type 'Function' can't be assigned to the parameter type 'String? Function(String?)?

在表单字段小部件的 dart 2 之后。

完整代码:

class MyFormField extends StatelessWidget {
  Function onTextChanged;
  Function formValidator;
  MyFormField(
      {
      required this.onTextChanged,
      required this.formValidator,
    });
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextFormField(
        style: TextStyle(fontWeight: FontWeight.bold),
        validator: formValidator, //***** Error Here
        keyboardType: TextInputType.number,
        onChanged: onTextChanged, //***** Error Here
      ),
    );
  }
}

改成这样

class MyFormField extends StatelessWidget {
  Function(String?) onTextChanged; //<=note
  Function(String?) formValidator; //<=note
  MyFormField(
      {
      required this.onTextChanged,
      required this.formValidator,
    });
  @override
  Widget build(BuildContext context) {
    return Padding(
      padding: const EdgeInsets.all(8.0),
      child: TextFormField(
        style: TextStyle(fontWeight: FontWeight.bold),
        validator: (String? value) => formValidator(value), //***** Error Here
        keyboardType: TextInputType.number,
        onChanged: (String? value) => onTextChanged(value), //***** Error Here
      ),
    );
  }
}

因为onChanged函数,是在表单中输入一个值时调用的,而这个值是一个string?,因为有时候没有输入值,你也不确定,哪个如果留空,则可能为 null。您的验证函数和 onchanged 函数需要一个字符串来计算和执行逻辑。他们从您的表单字段中的 (String? value) 中获取这些字符串。