如何解决“The property 'isEmpty' can't be unconditionally accessed”报错
报错原因
这个报错由Dart空安全校验触发:TextFormField的validator回调入参val类型为可空的String?,运行时可能为null,因此不能直接无条件调用isEmpty属性。
解决方案
有两种常用的修复方式:
- 方案1:使用空安全调用符配合默认值,无需修改原有代码结构,仅改动单行代码即可:
修改后的validator代码如下:
validator: (val) => val?.isEmpty ?? true ? 'Enter an email' : null,
逻辑说明:val?.isEmpty在val为null时会返回null,?? true表示当左侧结果为null时默认返回true,即可覆盖val为null、val为空字符串两种异常场景,正常触发提示。
- 方案2:先做空校验触发Dart类型提升,逻辑更清晰,不易出现边界问题:
修改后的validator代码如下:
validator: (val) { if (val == null || val.isEmpty) { return 'Enter an email'; } return null; },
逻辑说明:经过val == null的判断后,Dart空安全会自动将后续作用域内的val提升为非空String类型,调用isEmpty不会再触发空安全报错。
内容的提问来源于stack exchange,提问作者VOnStack
相关产品推荐
相关产品推荐

