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

Fat*_*kar 6 flutter dart-null-safety

class StudentValidationMixin {\n\n    String validateFirstName(String value) {\n      if(value.length<2){\n        return '\xc4\xb0sim en az iki karakter olmal\xc4\xb1d\xc4\xb1r';\n    }\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
class _StudentAddState extends State with StudentValidationMixin {\n  @override\n  Widget build(BuildContext context) {\n    return Scaffold(\n      appBar: AppBar(\n        title: Text("Yeni \xc3\xb6\xc4\x9frenci ekle"),\n      ),\n      body: Container(\n        margin: EdgeInsets.all(20.0),\n        child: Form(\n          child: Column(\n            children: <Widget>[\n              TextFormField(\n                decoration: InputDecoration(labelText: "\xc3\x96\xc4\x9frenci Ad\xc4\xb1", hintText: "Fatih"),\n                validator: validateFirstName,\n              ),\n            ],\n          ),\n        ),\n      ),\n    );\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

参数类型“String Function(String)”无法分配给参数类型“String?” 函数(字符串?)?'。

\n

这两个独立的代码位出现错误。我应该怎么办?

\n

Enz*_*nzo 5

\n

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

\n
\n

当你在函数/方法中不返回任何内容时,它会隐式返回 null,所以这

\n
String validateFirstName(String value) {\n  if(value.length<2){\n    return \'\xc4\xb0sim en az iki karakter olmal\xc4\xb1d\xc4\xb1r\';\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

相当于这个

\n
String validateFirstName(String value) {\n  if(value.length<2){\n    return \'\xc4\xb0sim en az iki karakter olmal\xc4\xb1d\xc4\xb1r\';\n  }\n  return null;\n}\n
Run Code Online (Sandbox Code Playgroud)\n

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

\n
//    v\nString? validateFirstName(String value) {\n  if(value.length<2){\n    return \'\xc4\xb0sim en az iki karakter olmal\xc4\xb1d\xc4\xb1r\';\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n
\n

参数类型“String Function(String)”无法分配给参数类型“String”?函数(字符串?)?\'。

\n
\n

validator参数TextFormField是一个接收可为空类型并返回可为空类型的函数(即String? Function(String?),所以只需在参数后面添加一个问号即可value

\n
//                              v\nString? validateFirstName(String? value) {\n  if (value == null) {\n    // The user haven\'t typed anything\n    return "Type something, man!";\n  }\n  if (value.length<2){\n    return \'\xc4\xb0sim en az iki karakter olmal\xc4\xb1d\xc4\xb1r\';\n  }\n}\n
Run Code Online (Sandbox Code Playgroud)\n