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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:18:01