flutter 错误:无法将参数类型“String Function(String)”分配给参数类型“String?函数(String?)?'

ekqde3dh  于 2023-10-22  发布在  Flutter
关注(0)|答案(4)|浏览(202)
class StudentValidationMixin {

    String validateFirstName(String value) {
      if(value.length<2){
        return 'İsim en az iki karakter olmalıdır';
    }
  }
}

主体可能会正常完成,导致返回“null”,但返回类型可能是不可为空的类型。

class _StudentAddState extends State with StudentValidationMixin {
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text("Yeni öğrenci ekle"),
      ),
      body: Container(
        margin: EdgeInsets.all(20.0),
        child: Form(
          child: Column(
            children: <Widget>[
              TextFormField(
                decoration: InputDecoration(labelText: "Öğrenci Adı", hintText: "Fatih"),
                validator: validateFirstName,
              ),
            ],
          ),
        ),
      ),
    );
  }
}

无法将参数类型“String Function(String)”分配给参数类型“String?函数(String?)?'.
这两段独立的代码出错了。我该怎么办?

fquxozlt

fquxozlt1#

主体可能会正常完成,导致返回“null”,但返回类型可能是不可为空的类型。
当你在函数/方法中不返回任何东西时,它会隐式地返回null,所以

String validateFirstName(String value) {
  if(value.length<2){
    return 'İsim en az iki karakter olmalıdır';
  }
}

相当于这个

String validateFirstName(String value) {
  if(value.length<2){
    return 'İsim en az iki karakter olmalıdır';
  }
  return null;
}

但是这个方法的返回类型是String,一个不可空的类型。要使其可为空(因为您将返回null),请在它后面添加一个问号:

//    v
String? validateFirstName(String value) {
  if(value.length<2){
    return 'İsim en az iki karakter olmalıdır';
  }
}

无法将参数类型“String Function(String)”分配给参数类型“String?函数(String?)?'.
TextFormFieldvalidator参数是一个函数,它接收可空类型并返回可空类型(即a String?函数(String?),因此只需在value参数后添加一个问号:

//                              v
String? validateFirstName(String? value) {
  if (value == null) {
    // The user haven't typed anything
    return "Type something, man!";
  }
  if (value.length<2){
    return 'İsim en az iki karakter olmalıdır';
  }
}
thtygnil

thtygnil2#

TextFormField验证器接受一个返回String?的函数,该函数接受一个参数String?,所以像下面这样重构你的代码。

class StudentValidationMixin {

  String? validateFirstName(String? value) {
    if(value == null)
      return "İsim boş olamaz!";

     if(value.length<2){
      return 'İsim en az iki karakter olmalıdır';
    }
    return null;
  }
}
xesrikrc

xesrikrc3#

TextFormField(
       validator: (value) {
       controller.isNumberValid(value);

因此,对于像TextFormField的验证器这样的东西,您需要以这种方式处理它以避免该错误。

dgjrabp2

dgjrabp24#

我已经回答了这个问题,关于使用null安全性的Flutter Form验证
不过,我还是会给出一个提示,以供快速参考(从链接中阅读完整的示例)

String? validatePassword(String? value) {
  if(value!.length < 6){
    return 'Invalid password, length must be more than 6';
  }

}

编辑文本是我为个人用途创建的自定义文本字段

EditText(hintText:"Email",fontSize: 12.sp,paddingLeft: 8,marginLeft:  10.h,marginRight: 10.h,
                        textController: controller.emailController,validator: validateEmail,),

相关问题