【发布时间】:2021-10-28 03:16:33
【问题描述】:
在检查电子邮件值为空或不是我得到的错误时,我在飞镖中收到参数类型不可分配错误
参数类型
void Function(String)不能赋值给参数类型void Function(String?)?。
和
参数类型
String? Function(String)不能赋值给参数类型'String? Function(String?)?。
这些是验证器类,
class EmailFieldValidator {
static String? validate(String value) {
return value.isEmpty ? 'Email can\'t be empty' : null;
}
}
class PasswordFieldValidator {
static String? validate(String value) {
return value.isEmpty ? 'Password can\'t be empty' : null;
}
}
这是给出错误的代码
List<Widget> buildInputs() {
return <Widget>[
TextFormField(
key: Key('email'),
decoration: InputDecoration(labelText: 'Email'),
validator: EmailFieldValidator.validate, //this gives string error mentioned above
onSaved: (String value) => _email = value, //getting void error mention above
),
TextFormField(
key: Key('password'),
decoration: InputDecoration(labelText: 'Password'),
obscureText: true,
validator: PasswordFieldValidator.validate, // getting string error mentioned above
onSaved: (String value) => _password = value, //getting void error mention above
),
];
}
【问题讨论】:
-
你对这些错误信息的理解是什么?
-
我猜错误消息说它不允许将不可为空的值分配给可空类型,我尝试进行适当的更改,但没有像添加空检查(!)
-
空检查不是问题。这是
XFieldValidator.validate函数本身的类型。您在这些函数中所做的任何事情都与错误无关,问题是它们的类型不正确。正如错误提示的那样,TextFormField对其验证器的预期类型为String? Function(String?),因此您需要使用String? validate(String? value)的函数签名来声明它。 -
非常感谢@Alexander,我找到并解决了两者的错误
-
我已将我的评论形式化为更充实的答案。希望我已经帮助您对这些错误的含义有所了解,并且从那里进行的修复应该是直截了当的。如果您有任何问题,请告诉我。
标签: flutter validation dart email-validation dart-null-safety