Dart空安全下如何简化空值判断的方法调用代码?
完全可以借助Dart空安全运算符简化代码,核心逻辑是结合空安全调用符?.和空默认值运算符??,替代手动非空判断和!强转操作,下面是两种常见实现方案:
方案1:搭配通用let扩展(推荐,代码最简洁)
你可以先定义一个全局通用的空安全转换扩展(这类工具扩展在Dart/Flutter项目中非常常用,不会增加冗余代码):
extension ObjectExtension<T> on T? { R? let<R>(R Function(T value) action) { final value = this; return value == null ? null : action(value); } }
扩展定义完成后,原有代码可以直接简化为:
title: Text(widget.text?.let(transform) ?? 'default'),
当widget.text为null时,?.会直接截断后续调用返回null,之后??会自动回退到default字符串,全程符合空安全规范,不需要手动做非空判断或者强制解包。
方案2:无需新增扩展的写法
如果你不想额外定义扩展方法,也可以借助局部变量的类型提升特性实现,不需要用!强转:
title: Text(() { final text = widget.text; return text == null ? 'default' : transform(text); }()),
内容的提问来源于stack exchange,提问作者santiromf
相关产品推荐
相关产品推荐

