如何处理Dart空安全报错:函数因可能为null无法无条件调用
Dart 空安全“函数可能为null无法调用”报错解决方案
这是Dart空安全校验的常规触发场景,待调用的函数为可空类型,编译器无法确认其运行时一定非空,因此抛出编译错误。你可以根据实际业务场景选择以下任意一种方案处理:
- 确认函数运行时一定非空:直接在函数名后添加空断言符
!强制调用,示例:
注意:如果运行时函数实际为null,该写法会直接抛出空异常,需要你自行确保调用场景下函数必然有值。// 原写法 myFunction(); // 修改后 myFunction!(); - 优先使用非空判断后调用(最安全):调用前先做非空校验,编译器识别到校验逻辑后会自动放行,不会抛出编译错误:
if (myFunction != null) { myFunction(); } - 允许函数为null时跳过调用:使用空调用符
?.配合call方法调用,函数为null时会直接跳过执行,不会触发 crash:myFunction?.call(); - 为空函数设置默认兜底逻辑:使用
??操作符给可空函数设置默认的空实现,就算原函数为null也会执行兜底逻辑,不会报错:(myFunction ?? () {})();
不建议无差别直接使用
!断言,优先选择非空判断或者空调用符的方案,可以大幅降低运行时崩溃概率。
内容的提问来源于stack exchange,提问作者Mujahid Raza
相关产品推荐
相关产品推荐

