优化Dart中的双重三元运算,寻求更精简的代码实现
Dart嵌套三元表达式精简优化方案
原始实现代码
实现1
fromAddress Get.isDarkMode ? isCart ? Images.emptyCartDark : Images.noDataFoundDark : isCart ? Images.emptyCartLight : Images.noDataFoundLight,
实现2
isCart ? Get.isDarkMode ? Images.emptyCartDark : Images.emptyCartLight : Get.isDarkMode ? Images.noDataFoundDark : Images.noDataFoundLight,
精简优化方案
方案1:提取为工具方法(可读性最高)
把判断逻辑封装成独立方法,后续维护、修改更便捷:
String getEmptyStateImage() { if (isCart) { return Get.isDarkMode ? Images.emptyCartDark : Images.emptyCartLight; } return Get.isDarkMode ? Images.noDataFoundDark : Images.noDataFoundLight; } // 使用示例 fromAddress: getEmptyStateImage(),
方案2:利用命名规则+映射表简化
如果Images类的常量命名遵循固定规则(前缀+主题后缀),可以通过字符串拼接+映射表实现:
// 提前定义映射关系 final Map<String, String> emptyStateImages = { 'emptyCartDark': Images.emptyCartDark, 'emptyCartLight': Images.emptyCartLight, 'noDataFoundDark': Images.noDataFoundDark, 'noDataFoundLight': Images.noDataFoundLight, }; // 使用示例 fromAddress: emptyStateImages[ '${isCart ? 'emptyCart' : 'noDataFound'}${Get.isDarkMode ? 'Dark' : 'Light'}' ],
方案3:简化嵌套三元结构
调整逻辑顺序并添加分组括号,减少视觉嵌套感:
fromAddress: isCart ? (Get.isDarkMode ? Images.emptyCartDark : Images.emptyCartLight) : (Get.isDarkMode ? Images.noDataFoundDark : Images.noDataFoundLight),
内容的提问来源于stack exchange,提问作者The Code Whisperer
相关产品推荐
相关产品推荐

