参数类型 '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)
中获取这些字符串。
我遇到错误
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)
中获取这些字符串。