You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否在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');
  }
}

实现说明

  1. 扩展直接定义在String?类型上,让可空字符串对象(包括链式调用产生的可空结果,比如obj?.str)都能直接调用该属性
  2. 使用get属性而非方法,调用时无需添加括号,符合规则要求
  3. 逻辑上先判断当前对象是否为null,是则返回true;非null时调用原生isEmpty判断是否为空字符串,完整覆盖规则要求的判定场景
  4. 在if条件中直接使用obj?.str.isEmptyOrNull即可,Dart会正确处理链式调用中的空值情况,无需额外转换或判断

内容的提问来源于stack exchange,提问作者Joel Broström

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 09:07:20