能否在Dart中创建符合指定规则的isEmptyOrNull字符串扩展?
实现Dart可空字符串的
isEmptyOrNull扩展属性 判定规则
- 当对象为
null或空字符串时返回true - 支持链式调用的可空对象
- 使用时无需括号、类型转换或
==true
完整可运行代码
extension StringExtension on String? { bool get isEmptyOrNull { return this == null || this!.isEmpty; } } class MyObject { MyObject({this.str}); final String? str; } void main() { // 测试场景1:对象为null final MyObject? obj = null; if (obj?.str.isEmptyOrNull) { print('object was empty string or had the value null'); } // 测试场景2:字符串属性为null final MyObject objWithNullStr = MyObject(str: null); if (objWithNullStr.str.isEmptyOrNull) { print('str is null'); } // 测试场景3:字符串属性为空字符串 final MyObject objWithEmptyStr = MyObject(str: ''); if (objWithEmptyStr.str.isEmptyOrNull) { print('str is empty'); } // 测试场景4:字符串属性为有效内容 final MyObject objWithValidStr = MyObject(str: 'Hello'); if (!objWithValidStr.str.isEmptyOrNull) { print('str has valid content'); } }
实现说明
- 扩展直接定义在
String?类型上,让可空字符串对象(包括链式调用产生的可空结果,比如obj?.str)都能直接调用该属性 - 使用
get属性而非方法,调用时无需添加括号,符合规则要求 - 逻辑上先判断当前对象是否为
null,是则返回true;非null时调用原生isEmpty判断是否为空字符串,完整覆盖规则要求的判定场景 - 在
if条件中直接使用obj?.str.isEmptyOrNull即可,Dart会正确处理链式调用中的空值情况,无需额外转换或判断
内容的提问来源于stack exchange,提问作者Joel Broström
相关产品推荐
相关产品推荐

