Flutter TextFormField校验时遇运算符'<'无法无条件调用报错求助
报错原因
这个报错是Dart空安全规范的强制校验触发的:
你代码中validator回调的参数input是可空类型(String?),input?.length的运算结果会在input为null时也返回null,Dart不允许null和数字直接用<比较,因此抛出该编译错误。
修复方案
你可以选择以下任意一种符合你业务逻辑的修复方式:
- 方案1(最稳妥,推荐):先做空判断,同时覆盖
input为null的异常场景
validator: (input) => input == null || input.trim().length < 3 ? "Email id Should be valid" : null,
说明:Dart空安全会自动识别
input == null判断后的代码分支里的input为非空类型,因此后续调用input.length不会触发空安全报错,额外加trim()可以避免用户输入全空格的异常情况。
- 方案2(空值默认兜底):给可能为空的长度值设置默认值
validator: (input) => (input?.trim().length ?? 0) < 3 ? "Email id Should be valid" : null,
说明:用空合并运算符
??设置当input?.length为null时默认取值为0,保证比较符号两侧都是数字类型。
- 方案3(非空断言,不推荐):如果你能100%确认
input不可能为null,可以用非空断言强制跳过编译校验
validator: (input) => input!.trim().length < 3 ? "Email id Should be valid" : null,
注意:如果运行时
input真的为null,该写法会直接抛出运行时空指针异常。
额外注意
你贴出的代码还存在语法缺失问题:InputDecoration和TextFormField都缺少闭合的),修复bug时记得补上,否则会触发语法报错。
内容的提问来源于stack exchange,提问作者Handika Pramudya Putra
相关产品推荐
相关产品推荐

