Flutter开发Form验证报错:无法无条件调用validate方法因接收者可能为null
问题原因
Dart空安全机制要求可空类型的变量必须先处理空的情况才能调用其方法,你代码里的_formKey.currentState属于可空类型,可能为null,直接调用validate()方法就会触发这个报错。
无法无条件调用方法'validate',因为接收者可能为'null'。你可以尝试使用条件调用(使用'?.'),或者为目标添加空检查('!')。
解决方法
你可以任选下面任意一种方案修改按钮的onPressed回调代码:
方案1:添加非空校验(更安全,推荐)
Dart会对经过非空判断的变量自动做类型提升,此时调用方法不会触发空安全报错:
onPressed: () { var currentState = _formKey.currentState; if (currentState != null && currentState.validate()) { _calculate(); } }
方案2:使用非空断言
你已经将_formKey绑定到了Form组件上,运行时currentState一定不会为null,可以用!强制标记该变量为非空:
onPressed: () { if (_formKey.currentState!.validate()) { _calculate(); } }
额外优化建议
你当前代码里两个TextFormField的validator函数没有明确写非空返回逻辑,后续运行可能会触发隐式返回null的警告,可以补充返回null的逻辑:
// 体重输入框的validator validator: (value) { if (value!.isEmpty) { return "Informe seu peso!"; } return null; }, // 身高输入框的validator validator: (value) { if (value!.isEmpty) { return "Informe sua altura!"; } return null; },
内容的提问来源于stack exchange,提问作者Raquel de matos mauricio
相关产品推荐
相关产品推荐

