Flutter自定义TextFormField组件validator参数类型不匹配报错如何解决?
自定义TextFormField组件validator属性类型不匹配报错修复方案
报错原因:自定义组件中
validator参数的类型定义不符合Flutter原生TextFormField的要求,原生组件的validator要求的类型是String? Function(String?)?(可接收一个可选字符串入参,返回值为可选字符串,参数本身也可空),而你定义的Function()是无入参、返回值动态的函数类型,两者类型不匹配导致报错。
修改步骤
- 第一步:修改
mytextformfield.dart中validator的类型定义
把原来的
final Function() validator;
替换为
final String? Function(String?)? validator;
修改后的完整自定义组件代码如下:
import 'package:flutter/material.dart'; class MyTextFormField extends StatelessWidget { final String? Function(String?)? validator; final bool obserText; final String name; const MyTextFormField({ Key? key, required this.obserText, required this.validator, required this.name, }) : super(key: key); @override Widget build(BuildContext context) { return TextFormField( obscureText: obserText, validator: validator, decoration: InputDecoration( border: const OutlineInputBorder(), hintText: name, ), ); } }
- 第二步:优化调用时的validator逻辑(必要优化)
你当前调用时校验通过返回的是空字符串"",Flutter的TextFormField约定校验通过时validator需要返回null,返回非空字符串都会被识别为校验失败提示,所以需要调整login.dart中validator的返回值:
修改后的调用代码如下:
MyTextFormField( obserText: obserText, name: "Email", validator: (value) { if (value == "") { return "Please Fill Email"; } else if (!regExp.hasMatch(value!)) { return "Email is Invaild"; } return null; }, )
内容的提问来源于stack exchange,提问作者Mado Awny
相关产品推荐
相关产品推荐

