Flutter自定义TextFormField的validator参数类型不匹配报错如何解决?
报错修复方案
报错原因
自定义组件中validator属性的类型定义不符合Flutter原生TextFormField的参数要求:
The argument type 'dynamic Function()' can't be assigned to the parameter type 'String? Function(String?)?'.dartargument_type_not_assignable
原生TextFormField要求validator是可空的、接收一个可选String入参、返回可选String的函数,你定义的无参Function()类型完全不匹配。
修复步骤
- 第一步:修改
mytextformfield.dart中validator的类型声明
import 'package:flutter/material.dart'; class MyTextFormField extends StatelessWidget { // 替换原来的Function() validator类型定义 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, ), ); } }
- 第二步:修改
login.dart中validator的返回逻辑
按照Flutter官方约定,validator校验通过时要返回null,返回非空字符串即代表校验失败,你当前校验通过返回空字符串""不符合约定,需要修正:
MyTextFormField( obserText: obserText, name: "Email", validator: (value) { if (value == "") { return "Please Fill Email"; } else if (!regExp.hasMatch(value!)) { return "Email is Invaild"; } // 校验通过返回null,不要返回空字符串 return null; }, ),
内容的提问来源于stack exchange,提问作者Mado Awny
相关产品推荐
相关产品推荐

