【问题标题】:The argument type 'Function' can't be assigned to the parameter type 'String? Function(String?)?'参数类型“函数”不能分配给参数类型“字符串?函数(字符串?)?
【发布时间】:2022-01-21 20:58:37
【问题描述】:

我遇到了这个错误,我不知道是什么原因解决它。

class PasswordTextFormField extends StatelessWidget {

  final Function validator;
  final String name;

  PasswordTextFormField({required this.name, required this.validator});

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      validator: validator, // here it gives the error
      decoration: InputDecoration(
        border: const OutlineInputBorder(),
        hintText: name,
      ),
    );
  }
}

它给出了这种错误:

参数类型“函数”不能分配给参数类型 '细绳?函数(字符串?)?'。

如果你没听懂我说的话:

Screenshot

感谢您的帮助!

【问题讨论】:

  • 添加一个带参数的匿名函数
  • 请分享您的代码,您的验证器函数返回类型与验证器的预期返回类型不匹配
  • Mr.Faizan 请问在哪里可以联系InTouch?
  • 先生。 Zabaykal 我怎么不明白

标签: flutter function


【解决方案1】:

因为validator 可以为空,所以你必须在回调函数中提供?

final Function? validator;

并将其用作

 validator: validator!,

同样,您传递的函数也应该可以为空

String? validateMyInput(){
  // your code
}

【讨论】:

  • 阿舒托什先生。它给出了同样的错误,我不明白你的意思是通过应该可以为空?
【解决方案2】:

验证器需要一个具有可空字符串参数和可空字符串返回类型的函数。比如:

String? validatingFunction(String? text) {
}

由于您没有正确声明验证器变量,因此您会收到此错误。要解决此问题,请将您的变量声明更改为:

final FormFieldValidator<String?> validator;

了解validatorFormFieldValidator

【讨论】:

  • @DastanKurdish 不客气,编码愉快!!!
【解决方案3】:

这是因为 TextInputField 需要一个函数,该函数需要一个字符串值作为参数并返回 null 或字符串。但是您试图为其提供与所需类型不匹配的任何功能。 更改代码如下


  final String? Function(String value) validator;
  final String name;

  PasswordTextFormField({required this.name, required this.validator});

  @override
  Widget build(BuildContext context) {
    return TextFormField(
      validator: validator, // here it gives the error
      decoration: InputDecoration(
        border: const OutlineInputBorder(),
        hintText: name,
      ),
    );
  }
} ````

【讨论】:

    猜你喜欢
    • 2021-09-20
    • 2021-10-21
    • 2021-10-13
    • 2021-10-28
    • 2021-09-04
    • 1970-01-01
    • 1970-01-01
    • 2021-12-20
    相关资源
    最近更新 更多