动态函数无法赋值给void function类型参数问题咨询
解决Dart中DefaultFormField组件的“动态函数无法赋值给void function类型参数”错误
问题根源
你遇到的错误是因为参数的函数类型声明不匹配TextFormField要求的回调类型:
- Dart中
Function(String)?属于动态函数类型,而TextFormField的onFieldSubmitted、onChanged等属性要求明确的带类型约束的函数类型(比如ValueChanged<String>?) - 你声明的
onChange是Function()?,但TextFormField的onChanged需要接收一个String参数,这也是类型不匹配的核心原因之一 validator属性要求的是FormFieldValidator<String>?(返回String?用于错误提示),而非普通的Function(String)?
修复后的代码
将参数类型替换为TextFormField回调对应的标准类型即可:
Widget DefaultFormField({ double height = 50, required TextEditingController controller, required TextInputType keyBoardType, ValueChanged<String>? onSubmit, FormFieldValidator<String>? onValidate, ValueChanged<String>? onChange, IconData? suffix, required String? text, bool isPassword = false, }) => Container( height: height, child: TextFormField( onFieldSubmitted: onSubmit, onChanged: onChange, controller: controller, validator: onValidate, keyboardType: keyBoardType, ), );
关键类型说明
ValueChanged<String>?:接收一个String参数、无返回值的函数类型,完全匹配onFieldSubmitted和onChanged的要求FormFieldValidator<String>?:接收String参数、返回String?的函数类型,适配validator逻辑(返回null表示验证通过,返回字符串则为错误提示文本)
内容的提问来源于stack exchange,提问作者Cr HN
相关产品推荐
相关产品推荐

