You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 05:54:02